Fórum Erro na SQL com SUM() #370078
29/04/2009
0
Tenho duas tabelas um de PEDIDO e outra de PEDIDOITEM.
PEDIDO
CODPEDIDO
CODVENDEDOR
DATA
VALORREVERTIDO
PEDIDOITEM
CODPEDIDOITEM
CODPEDIDO
CODPRODUTO
QTDE
TOTAL
EXEMPLO:
fiz uma VENDA que na tabela PEDIDOITEM salvo dois ITENS deste pedido.
dai montei uma SQL para somar VALORREVERTIDO(baseado na tabela PEDIDO e o TOTAL ( baseado na tabela PEDIDOITEM).
Dai oq acontece eh soma certo TOTAL mas a coluna VALORREVERTIDO ele soma mas soma como se fosse duas vezes.
Tipo vendi dois itens cada um a 10 = 20 , o valor revertido = 18, dai eu jogando esta SQL fica assim :
TOTAL = 20
VALORREVERTIDO = 36 e o certo seria 36
Estou utilizando Interbase 6 e D7. segue a SQL para analise.
Select Distinct(V.NomeCompleto) as Vendedor, SUM(P.ValorRevertido) as ValorRevertido,
SUM(I.Total) as Total from Pedido P
Left Join PedidoItem I on I.CodPedido = P.CodPedido
Left Join VendedorComprador V on V.CodVendedorComprador = P.CodVendedor
Where P.CodPedido = 891 Group By V.NomeCompleto, P.Desconto
Walter Faria
Curtir tópico
+ 0Posts
29/04/2009
Diegotiemann
VALORREVERTIDO = 36 e o certo seria 36
?????????
Mas não está certo? Ou eu não entadi a sua dúvida?
Dá uma olhada no grup by , o que tá fazendo aquela coluna de desconto ai?
Gostei + 0
29/04/2009
Walter Faria
Tipo vendi dois itens cada um a 10. TOTAL DO PEDIDO = 20.
Deste 20 ( total ) tem valor real da reversao .
VALORREVERTIDO = 18 ( pedido inteiro ).
dai eu jogando esta SQL fica assim :
TOTAL = 20
VALORREVERTIDO = 36 e o certo seria 36
O motivo do VALORREVERTIDO esta dando 36 e pq na PEDIDOITEM deste pedido tem dois ITENS . Nao sei o motivo que SUM() soma duas vezes.
OK
Obrigado.
Gostei + 0
29/04/2009
Diegotiemann
VALORREVERTIDO = 36 e o certo seria 36
Continuo não entendendo essa linha
se VALORREVERTIDO está resultando 36 e o certo seria 36, qual o problema, se está voltando 36?
Gostei + 0
29/04/2009
Diegotiemann
Você quis dizer o seguinte
VALORREVERTIDO = 36 e o certo seria 18
18 não 36
o problema está no seu select, você está aplicando SUM() na coluna VALORREVERTIDO, é óbvio que vai somar o valor que lá se encontar pra cada iten na tabela de pedidos
tenta assim
Select Distinct(V.NomeCompleto) as Vendedor, P.ValorRevertido SUM(I.Total) as Total from Pedido P Left Join PedidoItem I on I.CodPedido = P.CodPedido Left Join VendedorComprador V on V.CodVendedorComprador = P.CodVendedor Where P.CodPedido = 891 Group By 1, 2
Gostei + 0
30/04/2009
Walter Faria
era isto mesmo, obrigado. Mas qdo monto esta sql:
na esta agrupando pelo VENDEDOR: EXEMPLO
ROGERIO 1000,00
ANDRE 500,00
ANDRE 300,00
eu queria assim :
ROGERIO 1000,00
ANDRE 800,00
Select Distinct(V.NomeCompleto) as Vendedor, P.ValorRevertido, P.Desconto, SUM(I.Total) as Total from Pedido P
Left Join PedidoItem I on I.CodPedido = P.CodPedido
Left Join VendedorComprador V on V.CodVendedorComprador = P.CodResponsavel
Where p.codpedido >= 890
Group By v.NomeCompleto, P.ValorRevertido, P.Desconto
Gostei + 0
30/04/2009
Rjun
SELECT NomeCompleto, SUM(I.Total) AS Total FROM Pedido P LEFT JOIN PedidoItem I ON I.CodPedido = P.CodPedido LEFT JOIN VendedorComprador V ON V.CodVendedorComprador = P.CodResponsavel WHERE p.codpedido >= 890 GROUP BY v.NomeCompleto
Gostei + 0
30/04/2009
Walter Faria
Montei a SQL baseado na sua e ficou assim :
ROGERIO 1000,00 900,00
ANDRE 500,00 480,00
ANDRE 300,00 280,00
e queria que ficasse assim :
ROGERIO 1000,00 900,00
ANDRE 800,00 760,00
SELECT
NomeCompleto,
SUM(I.Total) AS Total, p.ValorRevertido
FROM
Pedido P
LEFT JOIN
PedidoItem I ON I.CodPedido = P.CodPedido
LEFT JOIN
VendedorComprador V ON V.CodVendedorComprador = P.CodResponsavel
WHERE
p.codpedido >= 890
GROUP BY
v.NomeCompleto, p.ValorRevertido
Gostei + 0
30/04/2009
Rjun
SELECT NomeCompleto, SUM(I.Total) AS Total, SUM(p.ValorRevertido) FROM Pedido P LEFT JOIN PedidoItem I ON I.CodPedido = P.CodPedido LEFT JOIN VendedorComprador V ON V.CodVendedorComprador = P.CodResponsavel WHERE p.codpedido >= 890 GROUP BY v.NomeCompleto
Gostei + 0
30/04/2009
Walter Faria
mas executei esta SQL que vc passou e assim mesmo que eu quero, mas so que algo errado, deixa eu tentar te explicar :
tipo na SQL ta somando com : SUM(I.Total) AS Total pra pegar total do pedido. na tabela PEDIDOITEM de um pedido tem dois itens , dai ele soma certinho mas so que o VALORREVERTIDO ele soma duas vezes
e o campo VALORREVERTIDO esta na tabela PEDIDO. Nao sei se fui claro.
da ficou assim :
ROGERIO 1000,00 1800,00
ANDRE 800,00 760,00
teria que ficar assim:
ROGERIO 1000,00 900,00
ANDRE 800,00 760,00
Gostei + 0
30/04/2009
Rjun
Gostei + 0
30/04/2009
Walter Faria
Tipo qdo eu salvo o PEDIDO eu ja calculo o valor da reversao e gravo na TABELA PEDIDO O VALORREVERTIDO.
PEDIDO
CODPEDIDO
CODRESPONSAVEL
CODCLIENTE
DATA
VALORREVERTIDO
PEDIDOITEM
CODPEDIDOITEM
CODPEDIDO
CODPRODUTO
QTDE
TOTAL
VENDEDORCOMPRADOR
CODVENDEDORCOMPRADOR
NOMECOMPLETO
NOME
Gostei + 0
30/04/2009
Lehapan
veja se o SQL abaixo resolve o seu problema ou te ajuda.
SELECT vend.NomeCompleto, ped.ValorRevertido, ( SELECT SUM(PEDIT.Total) FROM PedidoItem pedit WHERE pedit.CodPedido = ped.CodPedido ) AS Total FROM PEDIDO ped LEFT OUTER JOIN VendedorComprador vend ON vend.CodVendedorComprador = ped.CodResponsavel WHERE ped.codpedido >= 890 GROUP BY vend.NomeCompleto, ped.ValorRevertido
espero ter ajudado.
Gostei + 0
30/04/2009
Walter Faria
[/url]
Gostei + 0
30/04/2009
Rjun
Gostei + 0
01/05/2009
Walter Faria
SELECT
NomeCompleto,
SUM(I.Total) AS Total,
SUM(p.ValorRevertido)
FROM
Pedido P
LEFT JOIN
PedidoItem I ON I.CodPedido = P.CodPedido
LEFT JOIN
VendedorComprador V ON V.CodVendedorComprador = P.CodResponsavel
WHERE
p.codpedido >= 890
GROUP BY
v.NomeCompleto
com a esta SQL fica assim :
ROGERIO 1000,00 1800,00
ANDRE 800,00 760,00
teria que ficar assim:
ROGERIO 1000,00 900,00
ANDRE 800,00 760,00
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)