変数の値に基づいて変化する where 句にフィルターを追加する必要があるコードがあります。以下の例のように、@X の値が 0 の場合、OrderID = 10; のフィルターを含めたいと考えています。それ以外の場合は、OrderID = 20 のフィルターを追加し、DepartmentID の別のフィルターを NULL または値 30 に設定します。これは、以下のように IF ELSE を使用して実現できます。
DECLARE @X INT
-- Retrieve value for @X
IF @X = 0
BEGIN
SELECT *
FROM Customers
WHERE ProductID IS NOT NULL
AND OrderID = 10
END
ELSE
BEGIN
SELECT *
FROM Customers
WHERE ProductID IS NOT NULL
AND OrderID = 20 AND ( DepartmentID IS NULL OR DepartmentID = 30)
END
1 つの SQL ステートメントを使用してそれを行う方法があるのだろうか。WHERE 内で CASE を使用して実行できると思いましたが、SQL では以下が許可されていないようです。
SELECT *
FROM Customers
WHERE ProductID IS NOT NULL
AND CASE WHEN @X = 0 THEN OrderID = 10 ELSE OrderID = 20 AND ( DepartmentID IS NULL OR DepartmentID = 30) END
これを達成する方法はありますか。