SQL
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
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
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
A tabela de itens está amarrada com a de vendas. E a de pagamentos?
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)
Nesse caso use join natural(LEFT).
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
Faz um recorte dos dados e posta aqui, daàfaço um fiddle pra mostrar.
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
Tópico encerrado , respostas não são mais permitidas