IN 句内で CASE ステートメントを使用することは可能ですか?
これは、正しくコンパイルしようとしてきたものの単純化されたバージョンです。
SELECT * FROM MyTable
WHERE StatusID IN (
CASE WHEN @StatusID = 99 THEN (5, 11, 13)
ELSE (@StatusID) END )
ありがとう!
IN 句内で CASE ステートメントを使用することは可能ですか?
これは、正しくコンパイルしようとしてきたものの単純化されたバージョンです。
SELECT * FROM MyTable
WHERE StatusID IN (
CASE WHEN @StatusID = 99 THEN (5, 11, 13)
ELSE (@StatusID) END )
ありがとう!
CASE
スカラー値のみを返します。代わりにこれを行うことができます。(あなたの例のように、@ StatusID = 99の場合、99のStatusID値は一致しないと想定しています。)
select *
from MyTable
where (@StatusID = 99 and StatusID in (5, 11, 13))
or (@StatusID <> 99 and StatusID = @StatusID)
いいえ、代わりに外に置くことができます
SELECT *
FROM MyTable
WHERE 1 = (CASE WHEN @StatusID = 99 and StatusId in (5, 11, 13) then 1
WHEN coalesce(@StatusId, 0) <> 99 and StatusId in (@StatusID) then 1
ELSE 0
END)
これは case 文なしで書くこともできます。
もう 1 つのオプションは動的 SQL です。動的 SQL では、実際に SQL ステートメントを使用して文字列を作成し、それを実行します。ただし、この場合、動的 SQL はやり過ぎのように見えます。
テーブル値コンストラクターを使用してこれを別の方法で試みると思いました-次のコンテキストでは TVC は許可されていませんか?
SELECT *
FROM MyTable
WHERE StatusID IN
(
SELECT
CASE
WHEN @StatusID = 99 THEN (values(5),(11),(13)) t(StatusID )
ELSE @StatusID
END
)