SQL – CASE no WHERE

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

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.

4 thoughts on “SQL – CASE no WHERE

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

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

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *