切换案例在T-SQL中的子句

时间:2011-02-21 06:04:50

标签: tsql sql-server-2008-r2

为什么这不起作用?请帮忙。

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)

4 个答案:

答案 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

注意:我没有尝试过这种语法。我的猜测是这应该有效。