[firebase-br] Ajuda com comando SUM

Frederico Godoi frederico.godoi em gmail.com
Dom Nov 4 10:56:58 -03 2012


Faltou você colocar o END para o case

Enviado via iPhone

Em 04/11/2012, às 08:50, Fausto <fausto.s.a em uol.com.br> escreveu:

> André..
> Obrigadopela ajuda..
> como estou usando o Firebird 1.5 tive que construir uma procedure, pois o CASE WHEN nãodeu certo dentro do sum
> SELECT
>     SUM (CASE WHEN ITEDFT IS NULL THEN (ITEQDE * ITEEMB) ELSE 0) AS QTDEABERTO
> FROM PEDITEM
> WHERE(PEDCOD =  :PEDCOD
> O erro retornado é esse:
> Invalid token.
> Dynamic SQL Error.
> SQL error code = -104.
> Token unknown - line 2, char 63.
> ).
> no parenteses que fecha o sum, logo após o else.
> Em 31/10/2012 16:13, André Conrado escreveu:
>> O IIF está disponível em FB >= 2.0. Pode ser substituído por:
>> 
>> SUM(CASE WHEN ITEDFT IS NULL THEN ITEQDE * ITEEMB ELSE 0 END)
>> 
>> Abs
>> 
>> Em 31 de outubro de 2012 16:08, André Conrado <acf em andreconrado.net>escreveu:
>> 
>>> Para evitar os dois SELECTs vc tb pode fazer assim:
>>> 
>>> SELECT SUM( IIF( ITEDFT IS NULL, ITEQDE * ITEEMB, 0)) AS QDEABERTO,
>>> SUM( IIF( ITEDFT IS NULL, (ITEQDE * ITEEMB)* MODPRE, 0)) AS VLRABERTO,
>>> SUM( IIF( ITEDFT IS NOT NULL , ITEQDE * ITEEMB, 0) AS QDEBAIXADO,
>>> SUM( IIF( ITEDFT IS NOT NULL ,  (ITEQDE * ITEEMB)*MODPRE, 0)) AS
>>> VLRBAIXADO
>>> FROM PEDITEM
>>> WHERE (PEDCOD =  :PEDCOD) AND   (ITEDCN IS NULL)
>>> 
>>> Abs
>>> 
>>> Em 30 de outubro de 2012 20:50, Sandro Souza <escovadordebits em gmail.com>escreveu:
>>> 
>>> Bom dia/tarde/noite Fausto.
>>>> Faço aqui a minha humilde sugestão.
>>>> 
>>>> As suas duas consultas originais são as seguinte:
>>>> 
>>>> As quantidades e valores em aberto:
>>>> 
>>>> *SELECT SUM(ITEQDE * ITEEMB) AS QDEABERTO,
>>>> SUM((ITEQDE * ITEEMB)* MODPRE) AS VLRABERTO
>>>> FROM PEDITEM
>>>> WHERE(PEDCOD =  :PEDCOD)
>>>> AND   (ITEDFT IS NULL)
>>>> AND   (ITEDCN IS NULL)
>>>> *
>>>> E as quantidades e valores baixados:
>>>> 
>>>> *SELECT SUM(ITEQDE * ITEEMB) AS QDEBAIXADO,
>>>> SUM((ITEQDE * ITEEMB)*MODPRE) AS VLRBAIXADO
>>>> FROM PEDITEM
>>>> WHERE (PEDCOD = :PEDCOD)
>>>>   AND (ITEDFT IS NOT NULL)
>>>> AND(ITEDCN IS NULL)
>>>> *
>>>> Agora vamos transformá-los em "tabelas virtuais", ou seja, colocá-las no
>>>> FROM de um SELECT mais externo:
>>>> 
>>>> *SELECT
>>>>   A.QDEABERTO,
>>>>   A.VLRABERTO,
>>>>   B.QDEBAIXADO,
>>>>   B.VLRBAIXADO
>>>> FROM
>>>> ( SELECT
>>>>     SUM(ITEQDE * ITEEMB)QDEABERTO,
>>>>     SUM((ITEQDE * ITEEMB)* MODPRE)VLRABERTO
>>>>   FROM
>>>>     PEDITEM
>>>>   WHERE
>>>>     (PEDCOD =  :PEDCOD)AND
>>>>     (ITEDFT IS NULL)AND
>>>>     (ITEDCN IS NULL)) A,
>>>> ( SELECT
>>>>     SUM(ITEQDE * ITEEMB)QDEBAIXADO,
>>>>     SUM((ITEQDE * ITEEMB)*MODPRE)VLRBAIXADO
>>>>   FROM
>>>>     PEDITEM
>>>>   WHERE
>>>>     (PEDCOD = :PEDCOD)AND
>>>>     (ITEDFT IS NOT NULL)AND
>>>>     (ITEDCN IS NULL)) B
>>>> *
>>>> Agora é só testar.
>>>> 
>>>> Espero ter ajudado mais que atrapalhado. :D
>>>> 
>>>> 
>>>> Em 30 de outubro de 2012 16:48, Fausto <fausto.s.a em uol.com.br> escreveu:
>>>> 
>>>>> Pessoal, tenho um projeto, onde em determinada consulta, necessito
>>>>> retornaros seguinte valores da tabela de itens de pedidos:
>>>>> Quantidades em Aberto
>>>>> Valores em Aberto
>>>>> Quantidade Baixada
>>>>> Valores baixados
>>>>> 
>>>>> Hoje tenho duas Sqls para fazer essa soma, e gostaria de ter isso em uma
>>>>> sql, abaixo mostro o conteúdo decada uma.
>>>>> 
>>>>> Para somar os valores e quantidades em aberto:
>>>>> SELECT SUM(ITEQDE * ITEEMB) AS QDEABERTO,
>>>>> SUM((ITEQDE * ITEEMB)* MODPRE) AS VLRABERTO
>>>>> FROM PEDITEM
>>>>> WHERE(PEDCOD =  :PEDCOD)
>>>>> AND   (ITEDFT IS NULL)
>>>>> AND   (ITEDCN IS NULL)
>>>>> 
>>>>> Para somar os valores e quantidades Baixados:
>>>>> SELECT SUM(ITEQDE * ITEEMB) AS QDEBAIXADO,
>>>>> SUM((ITEQDE * ITEEMB)*MODPRE) AS VLRBAIXADO
>>>>> FROM PEDITEM
>>>>> WHERE (PEDCOD = :PEDCOD)
>>>>>   AND (ITEDFT IS NOT NULL)
>>>>> AND(ITEDCN IS NULL)
>>>>> 
>>>>> Estou tentando implementar um case when no sum, mas confesso já estou
>>>> com
>>>>> os miolos cozinhando...
>>>>> Se alguém puder me dar uma dica fico desde já agradecido.
>>>>> 
>>>>> --
>>>>> Fausto Alves
>>>>> Skype:faustoalves
>>>>> msn:faustoalves em com4.com.br
>>>>> Franca-SP
>>>>> Enviado pelo Mozilla Thunderbird
>>>>> http://br.mozdev.org/**thunderbird <http://br.mozdev.org/thunderbird>
>>>>> 
>>>>> ______________________________**________________
>>>>> 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<
>>>> http://www.firebase.com.br/fb/artigo.php?id=1107>
>>>>> Para consultar mensagens antigas: http://firebase.com.br/**pesquisa<
>>>> 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
>>>> 
>>> 
>>> 
>>> --
>>> Um Abraço,
>>> André Conrado.
>>> 
>>> 055 21 8840-6232 - Claro
>>> e-mail: acf em andreconrado.net
>>> http://andreconrado.net
>>> 
>> 
>> 
> 
> -- 
> Fausto Alves
> Skype:faustoalves
> msn:faustoalves em com4.com.br
> Franca-SP
> Enviado pelo Mozilla Thunderbird
> http://br.mozdev.org/thunderbird
> 
> 
> 
> ______________________________________________
> 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