[firebase-br] Ajuda com soma
Daniel Breda
daniel.breda em gmail.com
Qui Jan 19 23:12:00 -03 2012
Faltou um sum
select p.cod,p.descricao,p.estoque,
> coalesce(sum(ip.qtde_vendido),0)as vendido,
> coalesce(sum(p.estoque) - sum(ip.qtde_vendido)),0)as soma
Em 19/01/2012 22:05, Jose Luiz de Medeiros escreveu:
> Boa noite,
>
> dei uma mudada na consulta pegando um produto que não confere a soma e olhem o resultado que retorno:
>
> minha consulta SQL:
>
> select p.cod,p.descricao,p.estoque,
> coalesce(sum(ip.qtde_vendido),0)as vendido,
> coalesce(sum((p.estoque) - ip.qtde_vendido),0)as soma
>
> from
> produtos p
> left join item_pedido ip on(ip.cod_prod = p.cod)
> left join pedido pe on(pe.pedv = ip.pedv)
> left join item_carga ig on(ig.id_pedido = pe.pedv)
> left join carga cg on(cg.id_carga = ig.id_carga)
>
> where
> p.cod = 0078
> and
> cg.id_carga = 126
> group by
> p.cod,p.descricao,p.estoque
>
> O RESULTADO FOI:
>
> COD DESCRICAO ESTOQUE VENDIDO SOMA
>
> 0078 CAPA MAQ.NAPA/FLAN.BRASTEMP 10.2KG 861 12 1710
>
> O VALOR DO ESTOQUE ESTÁ CORRETO, O VENDIDO ESTA CORRETO MAS A SOMA NÃO TEM NADA A VER COMO SE PODE NOTAR.
>
> Quem pode me dar uma ajuda nessa consulta?
>
>
> Grato:
>
>
> Jose Luiz de Medeiros
> -----------------------------------
> Programmer& TI Professional
> :: delphi - php - firebird - mysql ::
> (31)9628-4764
>
>> ---- Original Message ----
>> From: acf em andreconrado.net
>> To: lista em firebase.com.br
>> Sent: Qui, Jan 19, 2012, 10:19 AM
>> Subject: Re: [firebase-br] Ajuda com soma
>>
>> Um problema mt comum quando se trabalha com a função SUM() é comum
>> esquecer de tratar os valores NULLs. Então pode ser este o seu
>> problema, ainda mais se vc trocar o INNER por LEFT JOIN. Utilize então
>> o conjunto SUM(COALESCE(<campo>, 0)), isso resolve o problema.
>>
>>
>> Agora, aproveitando a deixa, eu gostaria mto de saber pq os
>> desenvolvedores do Firebird não tratam isso de forma direta. Ou será
>> que estou enganado!!!!!
>>
>>
>> abçs.
>>
>>
>> Citando Wilson Rosa<wsrosa em gmail.com>:
>>
>>> José Luiz,
>>>
>>> Para não gerar erros, os campos na cláusula GROUP BY devem ser os mesmos da
>>> cláusula SELECT antes do SUM, ou seja,
>>>
>>> SELECT *CG.id_carga, I.cod_prod, I.desc_prod, I.cbarra, pr.estoque*,
>>> ...
>>> GROUP BY *CG.id_carga, I.cod_prod, I.desc_prod, I.cbarra, pr.estoque*
>>>
>>> Se você precisa agrupar por outros campos, como, *R.nome_regiao, U.nome,
>>> CG.rota*, coloque-os na cláusula SELECT e inclua as respectivas tabelas nas
>>> cláusulas INNER JOIN.
>>>
>>>
>>> *Wilson Rosa
>>> wsrosa em gmail.com
>>> *
>>> *12 8160-8030*
>>>
>>>
>>>
>>> Em 18 de janeiro de 2012 22:41, Jose Luiz de Medeiros<
>>> joseluiz em digitoneletronica.com.br> escreveu:
>>>
>>>> Boa noite.
>>>>
>>>> Tenho a seguinte estrutura de tabelas:
>>>>
>>>> CARGA
>>>> ID_CARGA
>>>> ROTA
>>>> ..
>>>>
>>>> ITEM_CARGA
>>>> ID
>>>> ID_CARGA
>>>> ID_PEDIDO
>>>> ..
>>>>
>>>> PEDIDO
>>>> ID_PEDIDO
>>>> ID_CLIENTE
>>>> ..
>>>> ITEM_PEDIDO
>>>> ID_ITEM
>>>> ID_PEDIDO
>>>> ID_PRODUTO
>>>> QTDE
>>>> ..
>>>>
>>>> PRODUTOS
>>>> ID_PROD
>>>> DESCRICAO
>>>> ESTOQUE
>>>> ..
>>>>
>>>> Preciso criar uma consulta onde listo os produtos de uma determinada
>>>> carga, agrupada somando os valores vendidos nos pedidos de uma determinada
>>>> carga.
>>>> Fiz essa view mas os resultados não estão batendo. determinado produto o
>>>> valor confere e determinado produto a soma vem errada, alguem teria uma
>>>> ideia para me ajudar? estou precisando muito de uma ajuda.
>>>>
>>>> Minha view:
>>>> CREATE VIEW VW_CARGA_CONDENSADA_PROD(
>>>> ID_CARGA,
>>>> NOME_REGIAO,
>>>> SEPARADOR,
>>>> ROTA,
>>>> COD_PROD,
>>>> DESC_PROD,
>>>> CBARRA,
>>>> ESTOQUE,
>>>> VENDIDO,
>>>> FALTA)
>>>> AS
>>>> select CG.id_carga,I.cod_prod,I.desc_prod,I.cbarra,pr.estoque
>>>> sum(I.qtde_vendido)as VENDIDO,
>>>> sum(PR.estoque - I.qtde_vendido)as FALTA
>>>> from Item_pedido I
>>>> inner join pedido P on(P.pedv = I.pedv)
>>>> inner join item_carga IG on (IG.id_pedido = P.pedv)
>>>> inner join carga CG on(CG.ID_CARGA = IG.ID_CARGA)
>>>> inner join produtos PR on(I.cod_prod = PR.cod)
>>>> where
>>>> i.qtde_vendido> 0
>>>> and
>>>> I.qtde_separado< i.qtde_vendido
>>>> group by
>>>> CG.id_carga,R.nome_regiao,U.nome,CG.rota,I.cod_prod,I.desc_prod,I.cbarra
>>>>
>>>> CHAMO ESSA VIEW ASSIM:
>>>>
>>>> SELECT * FROM VW_CARGA_CONDENSADA_PROD
>>>> WHERE ID_CARGA = 100
>>>>
>>>> Essa view não me traz a realidade de uma carga, vem com poucos produtos e
>>>> a soma de alguns produtos não confere.
>>>>
>>>> Agradeço quem puder me dar uma força...
>>>>
>>>> Jose Luiz
>>>> Jose Luiz de Medeiros
>>>> -----------------------------------
>>>> Programmer& TI Professional
>>>> :: delphi - php - firebird - mysql ::
>>>> (31)9628-4764
>>>>
>>>> ______________________________________________
>>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>>
>>> ______________________________________________
>>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>>> Para saber como gerenciar/excluir seu cadastro na lista, use:
>>> http://www.firebase.com.br/fb/artigo.php?id=1107
>>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>>>
>>
>>
>>
>> André Conrado
>> +55 21 88406232
>>
>> http://andreconrado.net
>>
>> "Posso todas as coisas naquele que me fortalece" Filipenses 4:13
>>
>>
>> ______________________________________________
>> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
>> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
>> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use: http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
Mais detalhes sobre a lista de discussão lista