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

07/02/2014

Alex Lekao

Blz Fabiano...

To no aguardo!!.. rsrsr
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


da pra colocar dentro de um sum,count..

exemplo

SELECT SUM(CASE WHEN GETDATE() < '2014-03-01 00:00' THEN 1 END)

Ira somar tudo que estiver menor que a data informada..

Caso nao saiba, count(coluna) só conta valores não nulos e count(*) conta tudo, o mesmo vale para funcoes de agrupamento.
Responder

07/02/2014

Marisiana Battistella

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.


As duas situações podem ser consideradas!
Acredito, que tudo depende do tipo de retorno que é preciso ter e da regra de negócio ou estudo de caso que está sendo tratado.
Apresentei a situação acima, pois ele só utiliza uma tabela no SQL que ele apresentou.
Já criei rotinas mais complexas utilizando o CASE e tratando bem os JOINs, mas foi no Oracle, não sei se pra SQL Server é igual...

Att
Responder

07/02/2014

Alex Lekao

Essa particularidade do Case nao sabia... nao tinha nem ideia... tbm nunca tentei... srsr

Mas eh bom saber!!!!

vivendo aprendendo... rsrs
Responder

07/02/2014

Marcio Morando

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



É isso ai mesmo Mari. Preciso que me retorne 3 colunas diferentes. Muito Obrigado.
Responder

07/02/2014

Marisiana Battistella

Por nada! Fico feliz em ter t ajudado!


Dessa forma fica fácil se precisar acrescentar colunas e buscar dados de mais tabelas.
Já utilizei essa lógica em uma rotina de 500 linhas e não tive problemas! =)

O maior segredo pra ter boa performance é criar o JOINs corretamente e fazer o uso dos índices (quando existirem) .

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