为什么这不起作用?请帮忙。
SELECT X
FROM Y
WHERE Z >= 5
AND A IN (CASE @someParameter when 1 THEN (5) ELSE (4,5) END)
如下所示
SELECT X
FROM Y
WHERE Z >= 5
AND A = (CASE @someParameter when 1 THEN 5 ELSE 4 END)
答案 0 :(得分:2)
您可以在没有case
的情况下完成此操作,例如:
WHERE Z >= 5
AND (
@SomeParameter = 1 AND A = 5
OR
@SomeParameter <> 1 AND A IN (4,5)
)
答案 1 :(得分:1)
您可以使用select语句而不是直接提及数字。我还没有尝试过执行它。但我们的想法是通过在括号内使用选择查询来设置所需的数字。
SELECT X
FROM Y
WHERE Z >= 5
AND A IN (CASE @someParameter when 1 THEN (SELECT 4) ELSE (SELECT 4 UNION SELECT 5) END)
答案 2 :(得分:0)
您无法从CASE语句返回 set ,范围或表(或您想要调用多个值的任何其他内容)。那个(4,5)
表达式是不允许的。我的建议是将这些值构建为一个可供您选择的小型查找表。
答案 3 :(得分:0)
SELECT X
FROM Y
WHERE Z >= 5
AND
CASE @someParameter
when 1 THEN A = 5
ELSE (A = 4 OR A = 5)
END
注意:我没有尝试过这种语法。我的猜测是这应该有效。