我有需要在其中将过滤器添加到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
我想知道是否有某种方法可以使用一条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
无论如何,有没有做到这一点。
最佳答案
你很亲近
AND OrderID = (CASE WHEN @X = 0 THEN 10 ELSE 20 END)
AND DepartmentID = (CASE WHEN @X = 0 THEN DepartmentID ELSE 30 END)
关于sql-server-2008 - 在WHERE中使用CASE,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19682185/