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连接到Sales本身(A,B,Sales)上的前一个和内部联接的2个(A,B)表。我尝试使用union,但第一个选择获取我不应该看到的行。第二个选择带来正确的选择。所以我想我可以做一个案例选择。但我最终得到了这个错误
“当EXISTS没有引入子查询时,只能在选择列表中指定一个表达式。”
有任何想法如何进行?我做错了什么吗?如果您需要更多信息,请询问。感谢。
答案 0 :(得分: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
答案 1 :(得分:0)
您可以在where子句中应用case语句(aslo使用IS NULL
而不是=
):
DECLARE @Test bit
set @TEST = NULL
SELECT * FROM Sales
WHERE A =
CASE
WHEN @Test IS NULL THEN 1
ELSE 2
END