2016-03-21 23 views
5

Ich habe in einer MS SQL SERVER 2012 Query stecken. Was ich will, ist, mehrere Werte in „CASE“ Operator in „IN“ Anweisung von WHERE-Klausel finden Sie die folgende schreiben:"CASE WHEN" -Operator in "IN" Anweisung

WHERE [CLIENT] IN (CASE WHEN T.[IS_PHYSICAL] THEN 2421, 2431 ELSE 2422, 2432 END) 

Das Problem hier in 2421, ist 2431 - sie können nicht mit Komma getrennt werden . Gibt es eine Lösung, um dies auf andere Weise zu schreiben? danke.

+0

können Sie bitte die Frage richtig mit Beispieldaten veröffentlichen – mohan111

+1

Ich glaube nicht, dass 'WHEN T. [IS_PHYSICAL]' arbeiten. SQL Server möchte einen booleschen Ausdruck. –

+0

Sie haben Recht, aber ich habe nur Dummy-Daten mit der gleichen Logik, und ich habe die Antwort. danke –

Antwort

5

Dies ist einfacher, wenn Sie nicht case in der where Klausel verwenden. Etwas wie dieses:

where (T.[IS_PHYSICAL] = 1 and [client] in (2421, 2431)) or 
     (T.[IS_PHYSICAL] = 0 and [client] in (2422, 2432)) 
+0

vielen dank, es ist einfacher. –

2

Ich würde AND/OR anstelle eines Fallausdrucks verwenden.

WHERE (T.[IS_PHYSICAL] AND [CLIENT] IN (2421, 2431)) 
    OR (NOT T.[IS_PHYSICAL] AND [CLIENT] IN (2422, 2432)) 
2

Sie könnten es in eine Kombination von UND und ODER aufteilen.

WHERE ((T.[IS_PHYSICAL]=1 AND [CLIENT] IN (2421, 2431)) 
     OR (T.[IS_PHYSICAL]=0 AND [CLIENT] IN (2422, 2432)))