2016-05-25 2 views
2

Мне нужно использовать оператор CASE WHEN в моем запросе с несколькими параметрами «THEN». Так что-то вроде этого:SQL - несколько параметров «THEN» в операторе «CASE WHEN»

... 
WHERE 
region = CASE WHEN @cbEU = 'true' **THEN 0 OR 1** 
       ELSE 2 END 

Или, возможно, что-то вроде:

... 
WHERE 
region IN CASE WHEN @cbEU = 'true' **THEN (0,1)** 
       ELSE (1,2) END 

Я не думаю, есть простой способ сделать это?

+5

Попробуйте использовать '' AND'/OR' вместо 'case' в' WHERE' положение. – jarlh

+1

Кроме того, это выражение case, а не case case. (Выражение case имеет возвращаемое значение. Оператор case - это условное выполнение кода, которое должно использоваться в хранимых процедурах и т. Д.) – jarlh

+1

Что вы пытаетесь достичь? –

ответ

4

Вы можете использовать:

WHERE ((@cbEU = 'true') AND region IN (0, 1)) OR 
     ((@cbEU = 'false') AND region IN (1, 2)) 
+0

Спасибо, это то, что мне нужно. – Johnathan

0

Вот пример кода, который я написал, чтобы ответить на ваш запрос:

Create Table Test 
(
    a int, 
    b varchar(10) 
) 

Insert into Test Values (1,'Sample1'),(2,'Sample2'),(3,'Sample3'),       
(4,'Sample4'),(5,'Sample5') 

Declare @input int = 2 

SELECT * from Test where 
b = 
CASE @input 
when 1 then 'Sample1' 
when 2 then 'Sample2' 
when 3 then 'Sample3' 
END 

Выход:

| b

2 | Sample2

Деловая формулировка довольно полезна в таких сценариях, как ваша. Он может использоваться в операциях select, update, where, having, OrderBy, Delete.

Ссылка:

http://www.dotnet-tricks.com/Tutorial/sqlserver/1MS1120313-Understanding-Case-Expression-in-SQL-Server-with-Example.html