2017-11-28 33 views
0

私はレポートを作成しています。データセットの格付けの違いによって、パラメータに応じて柔軟に対応する必要があります。Sql WHERE句のCASEとINの使用

nullまたは成績のみが必要です。私は構文エラーを取得し、CASE WHENの内側にそれを実装しようとする句が、これはちょうど私がパラメータをハードコーディングする文句を言わないように、データセットの一部をしようとしている、以下

は、私が試したものです、 (x is null or x in (1,2,3))

だろうどこだから、通常のこの部分の後の値

DECLARE @Type NVARCHAR(30) 
set @Type = foo 

select COUNT(A) as A,B,C 
FROM Activity act 
    inner join x 
    inner join v 
    inner join y 
    inner join z 
where 1=1 
and DetailKey = @Type 
and cd.Value is null or IN 
     CASE @Type 
     WHEN 'foo' THEN ('1','2','3') ELSE 
     WHEN 'bar' THEN ('YR','OR','DR') END 

EDIT:不足のための例では省略されていますが、問題はありません。

+0

は、あなたは完全なクエリを投稿することができますか? – Squirrel

+0

あなたのCASE WHEN構文も間違っています – Squirrel

+0

'1 = 1'の意味はなんですか?これは、処理時間を追加するだけの利点はありません。 – Larnu

答えて

2

CASE式の述語として値のリストを持つことはできません。次のようにしかし、あなたはあなたのWHERE句を修正してくださいすることができます間違っているところ私たちが指摘することができるよう

WHERE 
    1 = 1 AND  -- not sure if this is needed 
    DetailKey = @Type AND 
    (cd.Value IS NULL OR 
    (@Type = 'foo' AND cd.Value IN ('1','2','3')) OR 
    (@Type = 'bar' AND cd.Value IN ('YR', 'OR', 'DR'))) 
+0

まさに私が必要なもの、感謝:) –