Dúvidas CASE WHEN
05/02/2014
0
Estou utilizado o CASE WHEN em um SELECT. No Terceiro Case preciso que traga tudo que seja diferente de 'OND'.
Tentei fazer refugoOP.Maquina <> 'OND' , mas não funciona. Como devo proceder?
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Quantidade) END AS QTD_OND,
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Peso) END AS PESO_OND,
CASE refugoOP.Maquina WHEN ' ' THEN SUM(refugoOP.Quantidade) END AS QTD_CONV
Marcio Morando
Posts
05/02/2014
Alex Lekao
nao sei se entendi bem.
vc quer no calculo somar tudo que seja o restante eh isso?
por exemplo se for 1 some tal coisa, se for 2 some tal coisa, se for 3 some tal coisa senao some tal coisa?
se for assim vc usa o sum no else para ver se da o resultado que vc quer, que ele vai filtrar tudo o que vc colocou no case e o que for fora ele soma no else.
testa e diz ae se funcionou ou nao.
05/02/2014
Marcio Morando
Não Não, queria que no terceiro case ele somasse tudo que não fosse 'OND'.
Mas já consegui resolver. Mesmo assim obrigado pela atenção.
Até mais!
05/02/2014
Fabiano Carvalho
SELECT
CASE COLUNA
WHEN VALOR = 1 THEN 1
WHEN VALOR = 2 THEN 2
ELSE 3 END
FROM TABELA
05/02/2014
Marcio Morando
Muito Obrigado pela ajuda.
06/02/2014
Marcio Morando
Estou fazendo desta maneira, mas quando o registro tem por exemplo as tres opcoes abaixo, está me trazendo duas vezes a mesma coisa, como faço para me trazer somente um registro?
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Quantidade) END AS QTD_OND,
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Peso) END AS PESO_OND,
CASE refugoOP.Maquina WHEN ' ' THEN SUM(refugoOP.Quantidade) END AS QTD_CONV
06/02/2014
Fabiano Carvalho
Sobre a outra duvida,voce pode usar in no case ou utilizar a primeira dica que lhe dei,
Fabiano
06/02/2014
Alex Lekao
mas acho que deve ficar
CASE WHEN CAMPO IN ('1','10') THEN CAMPO ELSE CAMPO END
07/02/2014
Fabiano Carvalho
mas acho que deve ficar
CASE WHEN CAMPO IN ('1','10') THEN CAMPO ELSE CAMPO END
Exatamente.
Pode usar like, subselect, e tudo mais.
07/02/2014
Marisiana Battistella
Tentei fazer refugoOP.Maquina <> 'OND' , mas não funciona. Como devo proceder?
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Quantidade) END AS QTD_OND,
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Peso) END AS PESO_OND,
CASE refugoOP.Maquina WHEN ' ' THEN SUM(refugoOP.Quantidade) END AS QTD_CONV
Bom dia!
De acordo com a pergunta inicial, você teria que criar o seguinte SQL:
select CASE
WHEN refugoOP.Maquina = 'OND' THEN
SUM(refugoOP.quantidade)
END as qtd_ond,
CASE
WHEN refugoOP.Maquina = 'OND' THEN
SUM(refugoOP.quantidade)
END as peso_ond,
CASE
WHEN refugoOP.Maquina NOT IN ('OND') THEN
SUM(refugoOP.quantidade)
END as qtd_conv
from refugoOP
group by refugoOP.Maquina
No terceiro CASE pode utilizar NOT IN ou <> que vai funcionar...
Acredito que não afeta em nada a performance utilizando os 3 CASE, o que mais afeta a performance são os JOINs mal definidos (na maioria das vezes a falta deles) e o
Mas pelo q entendi no exemplo q, passastes, vc está utilizando apenas uma tabela, então não teria problema nenhum..
A dica que o Fabiano passou em utilizar apenas um CASE não é errada....
Mas no teu caso, pelo que entendi, vc precisa que retorne 3 colunas com nomes diferentes então vc precisa utilizar CASES separados...
07/02/2014
Marisiana Battistella
Tentei fazer refugoOP.Maquina <> 'OND' , mas não funciona. Como devo proceder?
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Quantidade) END AS QTD_OND,
CASE refugoOP.Maquina WHEN 'OND' THEN SUM(refugoOP.Peso) END AS PESO_OND,
CASE refugoOP.Maquina WHEN ' ' THEN SUM(refugoOP.Quantidade) END AS QTD_CONV
Bom dia!
De acordo com a pergunta inicial, você teria que criar o seguinte SQL:
select CASE
WHEN refugoOP.Maquina = 'OND' THEN
SUM(refugoOP.quantidade)
END as qtd_ond,
CASE
WHEN refugoOP.Maquina = 'OND' THEN
SUM(refugoOP.quantidade)
END as peso_ond,
CASE
WHEN refugoOP.Maquina NOT IN ('OND') THEN
SUM(refugoOP.quantidade)
END as qtd_conv
from refugoOP
group by refugoOP.Maquina
No terceiro CASE pode utilizar NOT IN ou <> que vai funcionar...
Acredito que não afeta em nada a performance utilizando os 3 CASE, o que mais afeta a performance são os JOINs mal definidos (na maioria das vezes a falta deles) e o
Mas pelo q entendi no exemplo q, passastes, vc está utilizando apenas uma tabela, então não teria problema nenhum..
A dica que o Fabiano passou em utilizar apenas um CASE não é errada....
Mas no teu caso, pelo que entendi, vc precisa que retorne 3 colunas com nomes diferentes então vc precisa utilizar CASES separados...
07/02/2014
Alex Lekao
mas acho que deve ficar
CASE WHEN CAMPO IN ('1','10') THEN CAMPO ELSE CAMPO END
Exatamente.
Pode usar like, subselect, e tudo mais.
Honestamente eu nao sabia... mais uma que aprendi..
Ow... Vc nao mandou a parada para mim eim. rsrs
07/02/2014
Alex Lekao
E com relacao ao desempenho acredito que o peso seja igual.
Eu usava case para algumas situacoes parecidas com essa sua necessidade aqui na empresa, mas acabei mudando para uma sibselect justamente pelos motivos que mencionei.
Abraco.
07/02/2014
Fabiano Carvalho
mas acho que deve ficar
CASE WHEN CAMPO IN ('1','10') THEN CAMPO ELSE CAMPO END
Exatamente.
Pode usar like, subselect, e tudo mais.
Honestamente eu nao sabia... mais uma que aprendi..
Ow... Vc nao mandou a parada para mim eim. rsrs
Até segunda-feira eu mando, estou sem tempo pra atualiza-lo rsrs.
Mas eu mando
Clique aqui para fazer login e interagir na Comunidade :)