Select somando errado

Firebird

25/02/2015

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.

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

Sidney Abreu

Curtidas 0

Respostas

Isaac Jose

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.
GOSTEI 0
Sidney Abreu

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

Marcos P

25/02/2015

Olá,

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

Sidney Abreu

25/02/2015

tambem não
GOSTEI 0
Marcos P

Marcos P

25/02/2015

E... tirando o distinct do primeiro select ?
GOSTEI 0
Marcos P

Marcos P

25/02/2015

Aliás... acho que o distinct você poderia tirar dos dois selects !
( pelo menos para testar )
GOSTEI 0
Marcos P

Marcos P

25/02/2015

No primeiro select, elimine do where a condição...

pedidos_itens.prod_id = pedidos_itens.prod_id and


Ela já está sendo usada no ON do INNER JOIN !
GOSTEI 0
Sidney Abreu

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

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

Marcos P

25/02/2015

Ok !!!

Que bom que resolveu !

T+
GOSTEI 0
Sidney Abreu

Sidney Abreu

25/02/2015

vlw, abç
GOSTEI 0
POSTAR