[firebase-br] Ajuda com soma

Jose Luiz de Medeiros joseluiz em digitoneletronica.com.br
Qui Jan 19 22:05:18 -03 2012


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





Mais detalhes sobre a lista de discussão lista