Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Jean Lucas De Camillo

[Resolvido] Case com 2 condições FireBird

Recommended Posts

Bom dia, estou com uma grande dúvida aqui no trabalho e que preciso resolver hoje. Mas ta complicado, já que não acho nenhum exemplo na internet resolvi recorrer a vocês!

É o seguinte: eu preciso colocar 2 condições no case da seguinte forma:

 

Caso o reembolso(ENTRADA_SAIDA.VALOR_REEMBOLSO) não for zero ou diferente de zero, o campo ENTRADA_SAIDA.VALOR_REEMBOLSO será o frete, se o ENTRADA_SAIDA.VALOR_REEMBOLSO for zero ou diferente de zero irá ser verificado o campo ENTRADA_SAIDA.FRETE se o ENTRADA_SAIDA.FRETE possuir o valor de "Emitente" o frete será ENTRADA_SAIDA.PRECO, se o ENTRADA_SAIDA.FRETE não for "Emitente", o frete possuirá o valor de 0.

 

O que e já fiz esta assim:

 

CASE WHEN ENTRADA_SAIDA.VALOR_REEMBOLSO <> 0 THEN SUM(ENTRADA_SAIDA.VALOR_REEMBOLSO) WHEN ENTRADA_SAIDA.FRETE = 'Emitente' THEN SUM(ENTRADA_SAIDA.PRECO) ELSE '0,00' END AS FRETE

 

Aguardo resposta.

Grato.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia amigo,

 

Mas qual sua dúvida? O que você fez não está funcionando como esperava?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qual o erro?

 

Dê uma olhada nessa página: http://www.devmedia.com.br/o-case-do-firebird/1489

 

Espero que seja útil. A disposição.

Por incrível que pareça ele da erro de GROUP BY porém, o mesmo se encontra correto e só da erro quando eu coloco a clausula CASE. Meu SQL é esse:

SELECT FIRST 999999 SKIP 0 PRODUTO.CODIGO AS CODIGO_PRODUTO,

PRODUTO.IDENTIFICADOR,

PRODUTO.CATEGORIA,

PRODUTO.DESCRICAO,

SUM(PRODUTO_ENTRADA_SAIDA.QTDE) AS QTDE,

MARCA.DESCRICAO AS MARCA,

SUM(PRODUTO_ENTRADA_SAIDA.VALOR_IPI) AS IPI,

CASE WHEN ENTRADA_SAIDA.VALOR_REEMBOLSO <> 0 THEN SUM(ENTRADA_SAIDA.VALOR_REEMBOLSO) WHEN ENTRADA_SAIDA.FRETE = 'Emitente' THEN SUM(ENTRADA_SAIDA.PRECO) ELSE '0,00' END AS FRETE

 

FROM ENTRADA_SAIDA

 

INNER JOIN PRODUTO_ENTRADA_SAIDA ON PRODUTO_ENTRADA_SAIDA.ENTRADA_SAIDA=ENTRADA_SAIDA.CODIGO

INNER JOIN PRODUTO ON PRODUTO_ENTRADA_SAIDA.PRODUTO=PRODUTO.CODIGO

LEFT JOIN MARCA ON MARCA.CODIGO = PRODUTO.MARCA

 

WHERE CAST(ENTRADA_SAIDA.DATA AS DATE)>='01/01/2011'

AND CAST(ENTRADA_SAIDA.DATA AS DATE)<='01/01/2012'

AND ENTRADA_SAIDA.SITUACAO <> 'Cancelado'

AND ( ENTRADA_SAIDA.DEVOLUCAO<>'Sim' OR ENTRADA_SAIDA.DEVOLUCAO IS NULL )

AND ENTRADA_SAIDA.GERA_MOVIMENTO='Débito Terceiro'

 

GROUP BY 1,2,3,4,6

ORDER BY QTDE ASC ;

 

Erro:

Dynamic SQL Error SQL error code = -104 Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause)

 

Estranho...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Invalid expression in the select list (not contained in either an aggregate function or the GROUP BY clause

 

Eu trabalho com DB2 e ele tem essa mesma "frescura". Tente incluir a coluna do CASE no teu GROUP BY pra fazer um teste.

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim ...

 

...
SUM(CASE WHEN ENTRADA_SAIDA.VALOR_REEMBOLSO <> 0 THEN (ENTRADA_SAIDA.VALOR_REEMBOLSO) 
        WHEN ENTRADA_SAIDA.FRETE = 'Emitente' THEN (ENTRADA_SAIDA.PRECO) 
        ELSE 0 END) AS FRETE
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

tente assim ...

 

...
SUM(CASE WHEN ENTRADA_SAIDA.VALOR_REEMBOLSO <> 0 THEN (ENTRADA_SAIDA.VALOR_REEMBOLSO) 
        WHEN ENTRADA_SAIDA.FRETE = 'Emitente' THEN (ENTRADA_SAIDA.PRECO) 
        ELSE 0 END) AS FRETE
...

 

Funcionou!

Obrigado Motta, resolveu o meu problema e agora já sei como usa mais condições no case.

E obrigado pra quem tentou ajudar a resolver meu problema.

Grato.

Agora a minha OS vai ser finalizada. kkkkkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.