1

私はおそらくこれについて明らかな何かを忘れたり見逃したりしているように感じるので、前もってお詫び申し上げます。ここに行きます。WHERE 句で case ステートメントを使用しています。以下は正常に機能します。

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

私の「問題」は、追加の OR 句を ELSE ブロックに追加したいということです..次のようなものです:

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

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

したがって、私の質問...これを達成するために使用できる正しい/代替ロジックは何ですか?
前もって感謝します

4

1 に答える 1

1

CASE1 つの値を返す式です。単一の式に対してテストする代わりに、CASE2 つの間で OR を実行できます。唯一の違いは、else 句です。(IN書き込みのショートカットとして使用SomeOtherCol = ... OR SomeOtherCol =)次のことができます:

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 ステートメントを作成できます。

于 2009-08-10T22:51:51.260 に答える