ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

duvida SQL (mysql)

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qua Mai 26, 2021 11:54 am    Assunto: duvida SQL (mysql) Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
joemil
Moderador
Moderador


Registrado: Quinta-Feira, 25 de Março de 2004
Mensagens: 9098
Localização: Sinop-MT

MensagemEnviada: Qua Mai 26, 2021 3:01 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Qua Mai 26, 2021 3:24 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
grsoft
Aprendiz
Aprendiz


Registrado: Segunda-Feira, 10 de Abril de 2006
Mensagens: 107

MensagemEnviada: Qua Mai 26, 2021 6:33 pm    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
imex
Moderador
Moderador


Registrado: Sexta-Feira, 7 de Janeiro de 2011
Mensagens: 11666

MensagemEnviada: Sex Mai 28, 2021 10:55 am    Assunto: Responder com Citação

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
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB