[firebase-br] Ajuda com comando SUM

Fausto fausto.s.a em uol.com.br
Dom Nov 4 08:50:08 -03 2012


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






Mais detalhes sobre a lista de discussão lista