2016-03-21 10 views
5

Mi sono bloccato in una query MS SQL SERVER 2012. quello che voglio, è quello di scrivere più valori in operatore "caso" in "IN" dichiarazione di clausola WHERE, vedere il seguente:"CASE WHEN" nell'istruzione "IN"

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

Il problema qui è nel 2421, 2431 - che non può essere separata con una virgola . c'è qualche soluzione per scrivere questo in altro modo? grazie.

+0

può si prega di inviare la domanda correttamente con dati di esempio – mohan111

+1

Non credo che 'QUANDO T. [IS_PHYSICAL]' funzionerà. SQL Server desidera un'espressione booleana. –

+0

hai ragione, ma ho appena pubblicato dati fittizi con la stessa logica, e ho ottenuto la risposta. grazie –

risposta

5

Questo è più semplice se non si utilizza case nella clausola where. Qualcosa del genere:

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

grazie mille, è il modo più semplice. –

2

Vorrei usare AND/OR invece di un'espressione di caso.

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

Si potrebbe suddividerlo in una combinazione di AND e OR.

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