2009-10-21 131 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