Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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.
>
Bom dia amigo,
Mas qual sua dúvida? O que você fez não está funcionando como esperava?
O case, o que eu postei ai. Não está funcionando, da erro de SQL. Ele não executa nem trás dados...
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.
>
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...
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.
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
...
>
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
Bom dia amigo,
Mas qual sua dúvida? O que você fez não está funcionando como esperava?