Dúvidas CASE WHEN

05/02/2014

0

Boa Tarde,

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

Marcio Morando

Responder

Posts

05/02/2014

Alex Lekao

oi Marcio, boa tarde!!!

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.
Responder

05/02/2014

Marcio Morando

Boa Tarde Amigo,

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!

Responder

05/02/2014

Alex Lekao

BLZ.

Qqr coisa estamos ai.
Responder

05/02/2014

Fabiano Carvalho

Prefira não colocar tudo isso de case..utilize apenas.
SELECT
CASE COLUNA
WHEN VALOR = 1 THEN 1
WHEN VALOR = 2 THEN 2
ELSE 3 END
FROM TABELA
Responder

05/02/2014

Marcio Morando

Beleza Fabiano, deixei como você indicou. Interfere muita coisa na Performance da consulta deixando como estava antes?

Muito Obrigado pela ajuda.
Responder

06/02/2014

Marcio Morando

Bom Dia Galera,

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
Responder

06/02/2014

Fabiano Carvalho

Questão de desempenho não sei lhe informar
Sobre a outra duvida,voce pode usar in no case ou utilizar a primeira dica que lhe dei,


Fabiano
Responder

06/02/2014

Marcio Morando

Como fica a sintaxe do CASE com IN?
Responder

06/02/2014

Alex Lekao

nunca usei in no CASE...

mas acho que deve ficar

CASE WHEN CAMPO IN ('1','10') THEN CAMPO ELSE CAMPO END
Responder

07/02/2014

Fabiano Carvalho

nunca usei in no CASE...

mas acho que deve ficar

CASE WHEN CAMPO IN ('1','10') THEN CAMPO ELSE CAMPO END


Exatamente.
Pode usar like, subselect, e tudo mais.
Responder

07/02/2014

Marisiana Battistella

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

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...

Responder

07/02/2014

Marisiana Battistella

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



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...

Responder

07/02/2014

Alex Lekao

nunca usei in no CASE...

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
Responder

07/02/2014

Alex Lekao

Particularmente eu usaria um subselect para cada situacao especifica que acho que o resultado seria melhor e vc conseguiria fazer algum outro tipo de tratamento melhor no select.

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.
Responder

07/02/2014

Fabiano Carvalho

nunca usei in no CASE...

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
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar