CONSULTA COM JOIN EM 3 TABELAS. VALOR ERRADO
Tenho as tabelas Pagamento, Venda e Vendido
Basicamente as informações ficam armazenadas assim:
Em Pagamento, o valor que já está pago referente à venda.
Em Venda fica registrado quando foi realizada e o cliente
Em Vendido são os produtos referente à venda.
Tenho 1 cliente, esse possuà 1 venda, essa venda possuà vários produtos e também possuà vários pagamentos.
Preciso saber se há algum débito desse cliente, realizando a comparação do valor das suas compras com os pagamentos realizados.
Essa query não deu certo, os pagamentos estão sendo somados repetidos:
[Ô]SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM (([Ô] & _
[Ô]Venda AS VE LEFT JOIN Vendidos AS VI ON VE.codCadastro = VI.codVenda) LEFT JOIN [Ô] & _
[Ô]Pagamento AS PG ON PG.codVenda = VE.codCadastro) [Ô] & _
[Ô]WHERE VE.codCliente = [Ô] & lngCodigoCliente, CNX, adOpenDynamic, adLockOptimistic
Exemplo:
Vendidos Venda 1:
1. 90,00
2. 140,00
3. 260,00
Apenas 1 pagamento de 490,00
Vendido Venda 2:
1. 1000
Apenas 1 pagamento de 1000,00
Com essa consulta, tenho 1490,00 de vendido (o que está correto) e 2470,00 de pagamento ( (490,00 x 3) + 1000 )
Há apenas 1 pagamento para cada venda, mas como a venda 1 tem 3 produtos vendidos, seu pagamento de 490,00 está sendo somado 3x
Pode me ajudar e me dizer o que de errado estou fazendo nessa query?
Obrigado!
[Ô] SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM Venda AS VE,Vendidos AS VI,Pagamento AS PG [Ô] & _
[Ô] WHERE VE.codCadastro = VI.codVenda [Ô] & _
[Ô] AND PG.codVenda = VE.codCadastro [Ô] & _
[Ô] AND PG.codVenda = VI.codVenda [Ô] & _
[Ô] AND VE.codCliente = [Ô] & lngCodigoCliente, CNX, adOpenDynamic, adLockOptimistic
O valor de pagamento, sendo o total dos 3 produtos (490,00), está sendo realizado 3x
Vlw
[Ô] AND PG.codVenda = VE.codCadastro [Ô]
não seria VE.codCadastro = VI.codCadastro
tente assim:
[Ô] SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM Venda AS VE,Vendidos AS VI,Pagamento AS PG [Ô] & _
[Ô] WHERE VE.codCadastro = VI.codVenda [Ô] & _
[Ô] AND PG.codVenda = VI.codVenda [Ô] & _
[Ô] AND VE.codCliente = [Ô] & lngCodigoCliente, CNX, adOpenDynamic, adLockOptimistic
VE = tblVendas: codCadastro, codCliente, Data
VI = tblVendidos: codCadastro, codVenda, codProduto, valVendido
PG = tblPagamentos: codCadastro, codVenda, valPago
Basicamente seria assim:
Para vários pagamentos, existe apenas 1 venda. Para vários produtos vendidos, existe apenas 1 venda.
Para várias vendas, existe apenas 1 cliente.
Então, com base no código do cliente, preciso de todas as vendas realizadas à ele, com o total vendido e total dos pagamentos recebidos.
Obrigado mais uma vez!
ex:
[Ô]SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM (([Ô] & _
[Ô]Venda AS VE LEFT JOIN Vendidos AS VI ON VE.codCadastro = VI.codVenda) LEFT JOIN [Ô] & _
[Ô]Pagamento AS PG ON PG.codVenda = VE.codCadastro) [Ô] & _
[Ô]WHERE VE.codCliente = [Ô] & lngCodigoCliente & [Ô] group by PG.codVenda[Ô].
[Ô] SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM Venda AS VE,Vendidos AS VI,Pagamento AS PG [Ô] & _
[Ô] WHERE VE.codCadastro = VI.codCadastro [Ô] & _
[Ô] AND VE.codCadastro = PG.codCadastro [Ô] & _
[Ô] AND VI.codCadastro = PG.codCadastro [Ô] & _
[Ô] AND VI.codVenda = PG.codVenda [Ô] & _
[Ô] AND VE.codCliente = [Ô] & lngCodigoCliente, CNX, adOpenDynamic, adLockOptimistic
Tentei montar a estrutura em Access para podermos entender melhor o problema.
Está anexo zipado (Consulta.accdb). Por favor, valide a estrutura.
[][ô]s,
Tunusat.
Citação::
Você tentou colocar um group by no final?
ex:
[Ô]SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM (([Ô] & _
[Ô]Venda AS VE LEFT JOIN Vendidos AS VI ON VE.codCadastro = VI.codVenda) LEFT JOIN [Ô] & _
[Ô]Pagamento AS PG ON PG.codVenda = VE.codCadastro) [Ô] & _
[Ô]WHERE VE.codCliente = [Ô] & lngCodigoCliente & [Ô] group by PG.codVenda[Ô].
Tentei mas também foi sem sucesso.
Citação::
tente agora amigo
[Ô] SELECT SUM(VI.valVenda * VI.Qtde), SUM(PG.Valor) FROM Venda AS VE,Vendidos AS VI,Pagamento AS PG [Ô] & _
[Ô] WHERE VE.codCadastro = VI.codCadastro [Ô] & _
[Ô] AND VE.codCadastro = PG.codCadastro [Ô] & _
[Ô] AND VI.codCadastro = PG.codCadastro [Ô] & _
[Ô] AND VI.codVenda = PG.codVenda [Ô] & _
[Ô] AND VE.codCliente = [Ô] & lngCodigoCliente, CNX, adOpenDynamic, adLockOptimistic
Agora os valores foram retornados como NULL
Citação::
POCE1DON,
Tentei montar a estrutura em Access para podermos entender melhor o problema.
Está anexo zipado (Consulta.accdb). Por favor, valide a estrutura.
[][ô]s,
Tunusat.
Obrigado pelo apoio mas não deu certo também amigo.
A tabela Vendido, na coluna [Ô]codVenda[Ô] se tentar repetir o codCadastro de Venda, não aceita. O problema esta aÃ, já que em Vendido pode existir diversos registros em codVenda mas todos com o mesmo codCadastro de Venda
Já tô pra ficar maluco com esse treco. Uma estrutura tão simples e não dá certo hora nenhuma!
Segue a query que utilizei:
[Ô]SELECT SUM(VI.Vendido), SUM(PG.Valor) [Ô] & _
[Ô]FROM [Ô] & _
[Ô](((SELECT codVenda, SUM(valVenda * Qtde) AS Vendido FROM tblVendidos GROUP BY codVenda) AS VI [Ô] & _
[Ô]LEFT JOIN tblPagamentos AS PG ON PG.codVenda = VI.codVenda) [Ô] & _
[Ô]LEFT JOIN tblVendas AS VE ON VE.codCadastro = VI.codVenda) [Ô] & _
[Ô]WHERE VE.codCliente = [Ô] & CodigoCliente, CNX
Obrigado pessoal, valeu mesmo pela força!
Abrax!