Tópico anterior Próximo tópico Novo tópico
VB.NET
#499723 - 27/04/2022 10:24:07 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Bom dia Pessoal
estou me matando em uma Consulta de SQL seguinte tem 3 tabelas (Vendas, Sub_vendas e Vendas_PGTO) Vendas tem os dados primarios da Venda(ID, data,Status e etc) Sub_venda tem os itens da Venda(Nome do Item, Codigo do Item e etc) Vendas_PGTO tem os dados de pagamento da venda(Valor, Tipo, e etc) o Cliente agora quer um relatório com a forma do Pagamento(valor do pagamento) e os Itens o que ocorre e que uma venda pode ter vários itens e varias formas de pagamento estou tentando assim de forma simples select venda.id, venda_pgto.valor, sub_venda.produto, venda.data, venda_pgto.tpag from venda_pgto inner join venda on (venda_pgto.ref = venda.id) inner join sub_venda on (venda.id = sub_venda.ref) where ( (venda.status = 'Finalizado') and (venda.data between '04/01/2022' and '04/27/2022') ) a questão e que esta duplicando os valores então quando eu somo o total fica um valor exorbitante explico: por exemplo uma venda que teve 3 itens me retorna assim ID Valor Produto 10 R$ 150,00 XXXXXX 10 R$ 150,00 YYYYYY 11 R$ 230,00 XXXXXX ou seja no caso da venda 11 que só tinha 1 item na venda funciona perfeito mais no caso da venda 10 que tem 2 itens o campo valor mostra o valor total 2X(1 para cada item) e ai que azeda o caldo tentei agrupar pela forma de pagamento, mais ai o valor total fico muito abaixo do real alguma dica para fazer funcionar essa consulta Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#499725 - 27/04/2022 10:54:51 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
A tabela de itens está amarrada com a de vendas. E a de pagamentos?
_______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
#499726 - 27/04/2022 11:28:32 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Citação: : A tabela de itens está amarrada com a de vendas. E a de pagamentos? SIM a tabela Vendas tem a chave primaria no campo ID as outras tabelas tem o Campo REF, que e relacionado com o campo ID da tabela vendas Relacionamento de um para muitos (um registro da tabela vendas pode ter vários ref nas demais tabelas) Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#499728 - 27/04/2022 13:09:39 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
Nesse caso use join natural(LEFT).
_______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
#499730 - 27/04/2022 14:25:17 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Citação: : Nesse caso use join natural(LEFT). na verdade eu ja tinha testado com o letf outer join a esqueci de falar a Base de dados e Firebird 2.5 select sub_venda.produto, venda.data, venda_pgto.valor, venda.id from sub_venda right outer join venda on (sub_venda.ref = venda.id) right outer join venda_pgto on (venda.id = venda_pgto.ref) where ( (venda.status = 'Finalizado') and (venda_pgto.tpag = 'PIX.') and (venda.data between '04/01/2022' and '04/26/2022') ) e mesmo com o Left ou Right continua duplicando o campo Valor da tabela de pagamentos sempre apresenta o valor da tabela pagamentos, para cada linha da tabela Sub_venda Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
#499732 - 27/04/2022 17:00:29 | ||||
![]() KERPLUNK RIO GRANDE DO SUL Cadast. em:Junho/2009 ![]() |
Faz um recorte dos dados e posta aqui, daà faço um fiddle pra mostrar.
_______________________________________________________________________ Virei Oráculo! The end is nigh, be ready for the nukes! |
|||
#499740 - 28/04/2022 09:39:57 | ||||
![]() MFLAVIO CAMPINAS Cadast. em:Maio/2009 ![]() |
Anexos estao visÃveis somente para usuários registrados Citação: : Faz um recorte dos dados e posta aqui, daà faço um fiddle pra mostrar. já agradeço de ante mão essa e a consunta que estou tentando select venda_pgto.valor, venda.data, sub_venda.produto, venda.id from sub_venda inner join venda on (sub_venda.ref = venda.id) inner join venda_pgto on (venda.id = venda_pgto.ref) where ( (venda.status = 'Finalizado') and (venda.data between '04/01/2022' and '04/26/2022') and (venda_pgto.tpag = 'PIX.') ) em anexo uma imagem do resultado nas duas primeiras linhas (ID 15175) ja da para entender esse ID 15175 e uma Venda que teve 2 itens(campo Produto) e 1 pagamento no valor de R$ 2130,00 no retorno da consulta o valor R$ 2130,00 aparece para cada produto o que acaba duplicando o valor quando eu somo o total do campo valor o que eu preciso e que o campo Valor seja apresentado apenas 1 vez, Ja tentei com right outer / Lefth Outer Deus e o maior dos Programadores, ele criou tudo em liguagem visual .... e viu Deus que era bom |
|||
Tópico anterior Próximo tópico Novo tópico