SQL的Fallthrough CASE声明

时间:2009-10-21 02:49:42

标签: sql sql-server tsql

在C#中我们可以写

switch(num)
{
  case 0:
  case 1: // do something; break;
  case 2:
  ............
  ...........
  case n: // do something break;
  default: //do something; break;
}

如何在SQL SERVER中实现类似的东西?

我不是在谈论在SQL SERVER中编写CASE的简单方法。我正在讨论的是,如果我需要在2个或更多个案例中执行与C#代码片段中显示的操作相同的操作,如何在SQL的CASE中执行类似的操作?

编辑:

我已经从这里得到了一些很好的答案。我该如何转换以下

SELECT CASE 
         WHEN [A]= num THEN '-' ELSE '' END [A], 
         CASE WHEN [B]= num THEN '-' ELSE '' END [B], 
         CASE WHEN [C]= num THEN '-' ELSE '' END [C],
         CASE WHEN [D]= num THEN '-' ELSE '' END [D]

...进入类似的事情:

SELECT CASE WHEN [A], 
       CASE WHEN [B], 
       CASE WHEN [C], 
       CASE WHEN [D] = num THEN '-' ELSE '' END [A] or [B] or [C] or [D]

实际上我需要在PIVOT查询中使用它。昨晚我解决了这个问题。但我不相信这种写作方式。因为每次,我都在做同样的事情。那么有没有更好的方式来呈现这个?

4 个答案:

答案 0 :(得分:4)

你可能正在寻找这个。

SELECT
      CASE 
         WHEN (num BETWEEN 0 AND 2) THEN 'Between 0 and 2'
         WHEN (num = 3) THEN '3'
         ELSE 'Something else'
      END
...

More information on CASE from MSDN.

答案 1 :(得分:2)

SQL确实支持CASE语句,但它与C#和Java等高级语言中的switch语句不同。在switch语句中,您具有fall-through的概念,如果未遇到break语句,则流程将继续到下一个case。相反,SQL CASE语句的行为类似于高级语言if(value==1){ ... }else if(value==2){ ... }else{ ... }

答案 2 :(得分:2)

与C#SWITCH语句一样,SQL Server的CASE 表达式不支持 支持。

注意强调表达式 - 它不能用于控制流,使用的是listed here

答案 3 :(得分:1)

像这样:

SELECT 
  CASE num
    WHEN 0 THEN ...
    WHEN 1 THEN ...
    ELSE ...
  END as SomeCol
FROM ...