Me deparei com um “problema”: Como fazer um CASE (comando SQL) na clausula WHERE.
Resolvi o problema e decidi post aqui na sintaxe do SQL Server 2000 ou 2005
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
declare @tipo varchar(50); declare @estado varchar(5); declare @ativo varchar(10); set @estado = '53'; SET @ativo = 'SIM'; SELECT * FROM cas_municipio WHERE MUN_EST_CODIGO = CASE WHEN @estado <> '' THEN @estado END AND MUN_ATIVO LIKE CASE WHEN @ATIVO <> 'N' THEN '%S' END |
Sendo WHERE MUN_EST_CODIGO =
o campo da tabela a ser comparado.
Quaquer dúvida é só comentar.
Abraço a todos.
Bom dia Adão, muito útil seu post.
Será que você poderia me ajudar na seguinte estrutura sql?
DECLARE @flag TINYINT
SET @flag = 2
select * from Clientes
where
case @flag
when 1 then (Status = 0)
when 2 then (Status = 1)
end
Eu sei que o código abaixo funciona, mas eu queria usar mesmo o case pois o select que na realidade preciso fazer é relativamente grande.
DECLARE @flag TINYINT
SET @flag = 2
if @flag = 1
select * from Clientes where status = 0
else
select * from Clientes where status = 1
Desde já agradeço.
Olá Raphael, obrigado pela participação aqui no blog.
A seguinte estrutura lhe atende:
select * from Clientes
where
Status = case @flag
when 1 then 0
when 2 then 1
end
post antigo mas ajudou muito, deu certo no sql 2014 vlw
.
select * from CALL
where 109253 = case when TechnicalService=1 then CALL.TechnicalId else CALL.UserId end
Embora a solução seja para SQL Server, apliquei em PL/SQL a mesma lógica e resolveu o meu problema. Abraço!