[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