Fórum Select somando errado #511908

25/02/2015

0

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

Responder

Posts

25/02/2015

Isaac Jose

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.
Responder

Gostei + 0

25/02/2015

Sidney Abreu

Infelizmente não, ja tinha feito esses teste, com left, rigth e só o join, todos ficam com o mesmo resultado
Responder

Gostei + 0

25/02/2015

Marcos P

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 ?
Responder

Gostei + 0

25/02/2015

Sidney Abreu

tambem não
Responder

Gostei + 0

25/02/2015

Marcos P

E... tirando o distinct do primeiro select ?
Responder

Gostei + 0

25/02/2015

Marcos P

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

Gostei + 0

25/02/2015

Marcos P

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 !
Responder

Gostei + 0

25/02/2015

Sidney Abreu

Realmente o problema é distinct do 1 select, obrigado, erro infantil da minha parte. Com certeza ele vai esconder alguns registros.
Responder

Gostei + 0

25/02/2015

Sidney Abreu

Realmente o problema é distinct do 1 select, obrigado, erro infantil da minha parte. Com certeza ele vai esconder alguns registros.
Responder

Gostei + 0

25/02/2015

Marcos P

Ok !!!

Que bom que resolveu !

T+
Responder

Gostei + 0

25/02/2015

Sidney Abreu

vlw, abç
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar