0
DECLARE @Test bit= NULL
SELECT  CASE WHEN @Test = NULL THEN 
    (SELECT * FROM Sales WHERE A =1)
    ELSE
    (SELECT * FROM Sales WHERE A =2)
END

我的查询并不是这么简单,而是在这些方面。我有一个过程的 7 个参数。在实际存储过程中,首先选择 LEFT 连接 3 个其他表(A,B,C)。第二个选择 LEFT 连接前一个的 2(A,B) 表和销售本身的内部连接 ​​(A,B,Sales)。我尝试使用联合,但第一个选择获得了我不应该看到的行。第二个选择带来正确的选择。所以我想也许我可以做一个案例选择。但我最终得到了这个错误

“当不使用 EXISTS 引入子查询时,选择列表中只能指定一个表达式。”

有任何想法如何进行吗?我做错了什么吗?如果您需要更多信息,请询问。谢谢。

4

2 回答 2

0

也许只是把它全部放在WHERE

SELECT * 
FROM Sales 
WHERE (@Test IS NULL AND A = 1)
  OR  (@Test IS NOT NULL AND A = 2)

更新:再次阅读你的问题听起来你有不同FROM的情况,在这种情况下使用IF

IF (@Test IS NULL)
  BEGIN
      SELECT * FROM Sales WHERE A = 1
  END
ELSE 
  BEGIN
      SELECT * FROM Sales WHERE A = 2 
  END
于 2013-09-25T19:55:42.220 回答
0

您可以在 where 子句中应用您的 case 语句(也可以使用IS NULL代替=):

DECLARE @Test bit
set @TEST = NULL

    SELECT * FROM Sales 
    WHERE A = 
            CASE 
                WHEN @Test IS NULL THEN 1 
                ELSE 2 
            END
于 2013-09-25T19:57:50.233 回答