[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