| Exibir mensagem anterior :: Exibir próxima mensagem | 
	
	
		| Autor | Mensagem | 
	
		| grsoft Aprendiz
 
  
 
 Registrado: Segunda-Feira, 10 de Abril de 2006
 Mensagens: 107
 
 
 | 
			
				|  Enviada: Qua Mai 26, 2021 11:54 am    Assunto: duvida SQL (mysql) |   |  
				| 
 |  
				| bom dia pessoal, estou com uma dúvida numa SQL e gostaria de saber se é possível, seguinte: 
 tenho um cadastro de produtos da seguinte forma
 
 
  	  | Código: |  	  | COD NOME        PRECO  TIPO 1   COCA-COLA     5    P
 2   VINHO TINTO   0    P
 3   SUAVE         10   C
 4   SECO          15   C
 | 
 
 o TIPO=P significa que é um produto e o C significa que é um complemento e o complemento só pode ser atrelado a um produto como na tabela abaixo:
 
 itens
 
 
  	  | Código: |  	  | COD CODPROD QUANT TOTAL 1    1       1     5
 2    1       2     10
 3    2       1     0
 4    2       1     0
 5    2       1     0
 | 
 
 subitens
 
 
  	  | Código: |  	  | COD CODITEM CODPROD QUANT TOTAL 1     3       3       1    10
 2     4       3       1    10
 3     5       4       1    15
 | 
 
 a minha dúvida é a seguinte: gostaria de uma SQL que agrupasse todos os produtos que são exatamente iguais e somasse suas quantidades e valores da forma abaixo
 
 
  	  | Código: |  	  | NOME         QUANT     TOTAL COCA-COLA      3        15
 VINHO TINTO    2        20  (esse seria com os complementos SUAVE)
 VINHO TINTO    1        15  (esses seria com o complemento SECO)
 | 
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| joemil Moderador
 
  
 
 Registrado: Quinta-Feira, 25 de Março de 2004
 Mensagens: 9100
 Localização: Sinop-MT
 
 | 
			
				|  Enviada: Qua Mai 26, 2021 3:01 pm    Assunto: |   |  
				| 
 |  
				| tenta isto: 
 
  	  | Código: |  	  | SELECT p.codigo, p.descricao,
 c.descricao,
 SUM(i.qtde),
 SUM(i.total)
 FROM itens i
 LEFT JOIN produtos p ON p.codigo = i.codprod
 LEFT JOIN subitens s ON s.coditem = i.codigo
 LEFT JOIN produtos c ON c.codigo = s.codprod
 GROUP BY p.codigo,
 p.descricao,
 c.descricao
 | 
 _________________
 <b>SEMPRE COLOQUE [RESOLVIDO] NO SEU POST</b>
 Enviar imagens: http://tinypic.com/
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| imex Moderador
 
  
 
 Registrado: Sexta-Feira, 7 de Janeiro de 2011
 Mensagens: 11666
 
 
 | 
			
				|  Enviada: Qua Mai 26, 2021 3:24 pm    Assunto: |   |  
				| 
 |  
				| Boa tarde, 
 Não sei se entendi corretamente mas segue uma sugestão para testes:
 
 
  	  | Código: |  	  | select p.Nome,
 sum(i.Quant) as Quant,
 sum(i.Total + coalesce(s.Total, 0)) as Total
 from Itens as i
 inner join Produtos as p
 on p.Cod = i.CodProd
 left join SubItens as s
 on s.CodItem = i.Cod
 group by
 p.Nome,
 i.CodProd,
 s.CodProd
 | 
 
 Espero que ajude
 
 Editado pela última vez por imex em Dom Out 01, 2023 5:42 pm, num total de 2 vezes
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| grsoft Aprendiz
 
  
 
 Registrado: Segunda-Feira, 10 de Abril de 2006
 Mensagens: 107
 
 
 | 
			
				|  Enviada: Qua Mai 26, 2021 6:33 pm    Assunto: |   |  
				| 
 |  
				| não dá certo pq como tem produto (vinho tinto) com subitens diferentes, ele não pode somar todos os 3, só pode somar se o item e o subitem forem exatamente iguais. 
 
  	  | imex escreveu: |  	  | Boa tarde, 
 Não sei se entendi corretamente mas segue uma sugestão para testes:
 
 
  	  | Código: |  	  | select p.Nome,
 sum(i.Quant) as Quant,
 sum(i.Total + coalesce(s.Total, 0)) as Total
 from Itens as i
 inner join Produtos as p
 on p.Cod = i.CodProd
 left join SubItens as s
 on s.CodItem = i.Cod
 group by
 p.Nome,
 i.CodProd,
 s.CodProd
 | 
 
 Espero que ajude
 
 | 
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		| imex Moderador
 
  
 
 Registrado: Sexta-Feira, 7 de Janeiro de 2011
 Mensagens: 11666
 
 
 | 
			
				|  Enviada: Sex Mai 28, 2021 10:55 am    Assunto: |   |  
				| 
 |  
				| Fiz um teste rápido por aqui e obtive o resultado igual ao que você postou, com 2 registros separados para o vinho tinto. O campo s.CodProd foi adicionado no Group By para que os subitens diferentes não sejam agrupados.
 |  | 
	
		| Voltar ao Topo |  | 
	
		|  | 
	
		|  |