0

多数のSOスレッドを検索することにより、where句で適切な条件を返すクエリを作成できません。たとえば、以下のクエリで使用したように、列Col1と変数がありますが、機能していませんintvar1varchar

Where CASE WHEN var1 = '1' THEN (Col1 = 1)  
WHEN var1 = '2' THEN (Col1 = 2)  
ELSE AND (1= 1) 
END

それは私に与えますsyntax error near '='

編集:

次のような状態が必要な場合はどうなりますか

Col1 IN(条件....)

4

3 に答える 3

6

私はそれが次のようになるべきだと思います。

Where Col1 = CASE WHEN var1 IN ('1','2') THEN var1 ELSE Col1 END

また

Where Col1 = CASE  var1 WHEN  '1' THEN 1
                        WHEN  '2' THEN 2
             ELSE Col1 END ...

Col1 is nullableちなみに、もしneed to selectそれらも同様に使用します。

Where Col1 is null OR 
             Col1 = CASE  var1 WHEN  '1' THEN 1
                        WHEN  '2' THEN 2
             ELSE Col1 END ...
于 2013-01-31T12:41:06.263 に答える
2

CASEは、値を返す式です。IFのようなフローロジックの制御用ではありません(ただし、VBのような一部の言語では同様のキーワードがそのように機能します)。試す:

WHERE Col1 = CASE 
  WHEN var1 = '1' THEN 1
  WHEN var1 = '2' THEN 2 
  ELSE Col1
END

これは、 Col1がNULL可能でない限り、試したコードで意図したとおりに機能します。回避策の1つは、データに表示できない魔法の値です。

WHERE COALESCE(Col1, -1) = CASE
  ...
ELSE COALESCE(Col1, -1) END
于 2013-01-31T12:41:28.700 に答える
0

カラムをケースの外側に配置する必要があります。

where Col1 = case when var1 = '1' then 1
                  when var1 = '2' then 2
             end
      OR (var1 != '1' AND var1 != '2')
于 2013-01-31T12:40:47.920 に答える