2009-08-10 7 views
1

私はおそらく忘れている/これを見逃しているような気がするので、前もって謝罪しています。ここに行く。私は私のWHERE句でcase文を使用している、以下の罰金に動作します:where句のケースステートメントw/or OR

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol = 
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN 
@SomeVal 
    WHEN... 
... 
    ELSE 
@SomeVal 
END 

私の「問題は」私はこのように私のELSE block..somethingに追加のOR句を追加したいということです。

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol = 
(
CASE WHEN (@Year = 0 AND @Period = 0) THEN 
@SomeVal 
    WHEN... 
... 
    ELSE 
@SomeVal OR @SomeVal - 1 
END 

これは当然、このエラーをスローします。 キーワード「OR」の近くに構文が正しくありません。 ELSEステートメント内

私の質問...これを達成するために使用できる正しい/代替ロジックは何ですか?
ありがとうございます。

答えて

1

CASEは、1つの値を返す式です。単一のCASEの表現に対してテストする代わりに、2つの間でORを実行できます。違いはelse句だけです。

WHERE r.[SomeCol] = @SomeColVal 
AND SomeOtherCol in 
    (CASE WHEN (@Year = 0 AND @Period = 0) THEN 
     @SomeVal 
     CASE WHEN... 
      ... 
     CASE ELSE 
     @SomeVal END, 
    CASE WHEN (@Year = 0 AND @Period = 0) THEN 
     @SomeVal 
     CASE WHEN... 
      ... 
     CASE ELSE 
     @SomeVal - 1 END) 

私の推測では、これはあなたが必要以上のロジックを持っている、とあなたの状況の詳細が知られていた場合にははるかに簡単かつ明確else文は次のようになります。あなたは何ができる(書き込みSomeOtherCol = ... OR SomeOtherCol =ためのショートカットとしてINを使用)書きました。