2016-05-25 30 views
2

Ich brauche eine CASE WHEN-Anweisung in meiner Abfrage mit mehreren 'THEN' Optionen. So etwas wie folgt aus:SQL - Mehrere 'THEN' Optionen in einer 'CASE WHEN' Anweisung

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

Oder vielleicht so etwas wie:

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

Ich glaube nicht, es eine einfache Möglichkeit, dies zu tun ist?

+5

Versuchen zu verwenden 'und' /' OR' statt 'case' in der' WHERE' Klausel. – jarlh

+1

Auch ist es ein Fallausdruck, keine Fallaussage. (Der case-Ausdruck hat einen Rückgabewert. Die case-Anweisung ist eine bedingte Codeausführung, die in gespeicherten Prozeduren usw. verwendet werden soll.) – jarlh

+1

Was möchten Sie erreichen? –

Antwort

4

Sie verwenden können:

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

Danke, das ist was ich brauchte. – Johnathan

0

Hier ist der Beispielcode, die ich schrieb Ihre Anfrage zu beantworten:

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 

Ausgang:

a | b

2 | Sample2

Case-Anweisung ist in Szenarien wie Ihrer ziemlich nützlich. Es kann in Select-, Update-, Where-, OrderBy- und Delete-Anweisungen verwendet werden.

Referenz:

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