2009-10-21 130 views
2

在C#中,我们可以写SQL的下通CASE语句

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

不知道你在说什么行为。你得到的switch语句(一旦我们添加了编译所需的中断)直接映射到一个简单的TSQL case语句。尝试提供一些编译的C#以及想要复制的行为。 – 2009-10-21 02:53:37

+1

请注意,C#FWIW不支持贯穿性。 – 2009-10-21 02:54:43

+0

我知道这有点晚,但是你可以在when语句中使用像'or'这样的逻辑表达式来引入由同一操作处理的多个条件。 – deutschZuid 2012-01-18 00:42:26

回答

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.

+0

我明白了..但如何把下面的内容格式 选择\t \t CASE WHEN \t [A] = NUM​​ THEN ' - ' ELSE '' END [A] \t \t \t,CASE WHEN \t [B] = NUM THEN 'X' ELSE '' END [B] \t \t \t,CASE WHEN \t [C] = NUM​​ THEN 'X' ELSE '' END [C] \t \t \t,CASE WHEN \t [d] = NUM​​ THEN' X'ELSE''END [D] – 2009-10-21 03:08:12

+0

如果你想返回四个单独的列,我认为你已经尽可能地接近它了。 – 2009-10-21 03:15:04

1

像这样:

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

虽然 - 我想知道我是否错过了一些东西。在你的C#代码中,你只能处理一个CASE,就像在这个查询中一样。如果您需要过程代码,那么您应该使用IF,但是如果可以的话,您应该尝试将代码修改为单个查询。 – 2009-10-21 02:53:01

+0

我认为他说的是CASE WHEN num = 1 OR num = 2 THEN ... – 2009-10-21 02:54:54

+0

不是..我不是在寻找这个..这是完美的,但我想写一个1-1当时的时间,可以我们做类似 CASE号码 当0 当1 THEN .... 这可能吗? – 2009-10-21 02:56:07

2

SQL不支持CASE声明,但它是不一样的东西在高级语言如C#和Java的switch声明。在一个switch语句中,你有一个fall-through的概念,如果没有遇到break语句,流程会继续到下一个case。相反,SQL CASE语句的行为与高级语言的if(value==1){ ... }else if(value==2){ ... }else{ ... }类似。

+0

是的你是对的。我也在网上搜索过,但没有回答。所以我在这里发布只是为了确保。非常感谢。 – 2009-10-21 03:03:20

+0

虽然这与高等级与低等级无关。我甚至会争辩说SQL在这种情况下是更高级的语言。 – 2015-06-12 11:51:27

2

如C#switch语句,SQL Server的CASE 表达支持下通。

注意表达式的重点 - 它不被用于控制流量,使用什么是listed here