Select somando errado
Pessoal, estou com um problema simples, mas infelizmente não consigo resolver.
Eu tenho uma tabela de VENDAS e outra de ITENS, então preciso somar a qtde vendida de cada produto, mas quanto eu utilizo a função SUM do firebird 2.5 está praticamente triplicando a qtde. Ainda não consegui entender o motivo já que estou usando o Group By em um campo só para agrupar os valores.
No primeiro SELECT eu fiz sem somar para verificar a qtde correta.
Resultado do Select 1
[img:descricao=Resultado 01]http://arquivo.devmedia.com.br/forum/imagem/267272-20150225-102351.png[/img]
No Select 2, fiz o somatório onde esta alterando os valores.
Resultado do Select 2
[img:descricao=Resultado do Select 2]http://arquivo.devmedia.com.br/forum/imagem/267272-20150225-102502.png[/img]
O Valor do somatório é para ser 216 e não 626. Alguém pode me ajudar?
Eu tenho uma tabela de VENDAS e outra de ITENS, então preciso somar a qtde vendida de cada produto, mas quanto eu utilizo a função SUM do firebird 2.5 está praticamente triplicando a qtde. Ainda não consegui entender o motivo já que estou usando o Group By em um campo só para agrupar os valores.
No primeiro SELECT eu fiz sem somar para verificar a qtde correta.
select distinct
pedidos_itens.prod_id,
pedidos_itens.pi_qtde
from pedidos
inner join pedidos_itens on (pedidos.ped_id = pedidos_itens.ped_id)
inner join produtos on (pedidos_itens.prod_id = produtos.prod_id)
where
pedidos.status = 1 and
pedidos.tipo_id < 5 and
pedidos.loj_id = :loja and
pedidos_itens.prod_id = pedidos_itens.prod_id and
cast(pedidos.data_emissao as date) between :dt_ini and :dt_fim and
pedidos_itens.prod_id in(4)Resultado do Select 1
[img:descricao=Resultado 01]http://arquivo.devmedia.com.br/forum/imagem/267272-20150225-102351.png[/img]
No Select 2, fiz o somatório onde esta alterando os valores.
select distinct
pedidos_itens.prod_id,
sum(pedidos_itens.pi_qtde)
from pedidos
inner join pedidos_itens on (pedidos.ped_id = pedidos_itens.ped_id)
where
pedidos.status = 1 and
pedidos.tipo_id < 5 and
pedidos.loj_id = :loja and
cast(pedidos.data_emissao as date) between :dt_ini and :dt_fim
group by pedidos_itens.prod_id
Resultado do Select 2
[img:descricao=Resultado do Select 2]http://arquivo.devmedia.com.br/forum/imagem/267272-20150225-102502.png[/img]
O Valor do somatório é para ser 216 e não 626. Alguém pode me ajudar?
Sidney Abreu
Curtidas 0
Respostas
Isaac Jose
25/02/2015
bom dia nao conheço o firebird.
mais o inner join pega tudo das duas tabelas
utilize o left join para ver se o resultado muda.
mais o inner join pega tudo das duas tabelas
utilize o left join para ver se o resultado muda.
GOSTEI 0
Sidney Abreu
25/02/2015
Infelizmente não, ja tinha feito esses teste, com left, rigth e só o join, todos ficam com o mesmo resultado
GOSTEI 0
Marcos P
25/02/2015
Olá,
Inserindo o segundo inner do primeiro select...
No segundo select, o resultado muda ?
Inserindo o segundo inner do primeiro select...
inner join produtos on (pedidos_itens.prod_id = produtos.prod_id)
No segundo select, o resultado muda ?
GOSTEI 0
Sidney Abreu
25/02/2015
tambem não
GOSTEI 0
Marcos P
25/02/2015
E... tirando o distinct do primeiro select ?
GOSTEI 0
Marcos P
25/02/2015
Aliás... acho que o distinct você poderia tirar dos dois selects !
( pelo menos para testar )
( pelo menos para testar )
GOSTEI 0
Marcos P
25/02/2015
No primeiro select, elimine do where a condição...
Ela já está sendo usada no ON do INNER JOIN !
pedidos_itens.prod_id = pedidos_itens.prod_id and
Ela já está sendo usada no ON do INNER JOIN !
GOSTEI 0
Sidney Abreu
25/02/2015
Realmente o problema é distinct do 1 select, obrigado, erro infantil da minha parte. Com certeza ele vai esconder alguns registros.
GOSTEI 0
Sidney Abreu
25/02/2015
Realmente o problema é distinct do 1 select, obrigado, erro infantil da minha parte. Com certeza ele vai esconder alguns registros.
GOSTEI 0
Marcos P
25/02/2015
Ok !!!
Que bom que resolveu !
T+
Que bom que resolveu !
T+
GOSTEI 0
Sidney Abreu
25/02/2015
vlw, abç
GOSTEI 0