2016-03-21 18 views
5

私はMS SQL SERVER 2012クエリを実行しました。私が欲しいもの 、以下を参照してください、WHERE句の声明「IN」に「CASE」オペレータで複数の値を記述することです:"IN"ステートメントの "CASE WHEN"演算子

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

ここでの問題は、2421年、2431年である - 彼らは、カンマで区切ることはできません。 これを他の方法で書く方法はありますか?ありがとう。

+0

サンプルデータを正しく投稿してください。 – mohan111

+1

私は 'T. [IS_PHYSICAL]が動作するとは思わない。 SQL Serverではブール式が必要です。 –

+0

あなたは正しいですが、私はちょうど同じロジックでダミーのデータを投稿しました。私は答えを得ました。おかげで多くの、簡単な方法をありがとう –

答えて

5

句にcaseを使用しないと、これは簡単です。このようなもの:

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

。 –

2

私は、ケース式の代わりにAND/ORを使用します。

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

あなたはそれをANDとORの組み合わせに分解することができます。

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