在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查询中使用它。昨晚我解决了这个问题。但我不相信这种写作方式。因为每次,我都在做同样的事情。那么有没有更好的方式来呈现这个?
答案 0 :(得分:4)
你可能正在寻找这个。
SELECT
CASE
WHEN (num BETWEEN 0 AND 2) THEN 'Between 0 and 2'
WHEN (num = 3) THEN '3'
ELSE 'Something else'
END
...
答案 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 ...