SQL

 Tópico anterior Próximo tópico Novo tópico

SQL

VB.NET

 Compartilhe  Compartilhe  Compartilhe
#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


Membro da equipe
A tabela de itens está amarrada com a de vendas. E a de pagamentos?

_______________________________________________________________________
Virei Orculo!
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


Membro da equipe
Nesse caso use join natural(LEFT).

_______________________________________________________________________
Virei Orculo!
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


Membro da equipe
Faz um recorte dos dados e posta aqui, daí faço um fiddle pra mostrar.

_______________________________________________________________________
Virei Orculo!
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


Tópico encerrado, respostas não sao permitidas
Encerrado por MFLAVIO em 08/06/2022 11:13:18