2013-04-22 66 views
5

試圖創建一個基於其他四列中的值的計算列。 第1列,Coulmn 2,第3列,第4列可能是或否 最終結果的計算列,讓我們說所謂的進步,應該沿着這條線的東西:要增加值的SQL Case語句

Progress = CASE 
WHEN [Column1] = 'Yes' THEN Value+1 
WHEN [Column2] = 'Yes' THEN Value+1 
WHEN [Column3] = 'Yes' THEN Value+1 
WHEN [Column4] = 'Yes' THEN Value+1 
ELSE 0 END 

希望這是有道理的顯然上述語法不正確。

+0

所以你想在這些列的'是的? – cmd 2013-04-22 19:50:10

+3

請提供樣本數據和結果以闡明您真正想要的內容。 – 2013-04-22 19:50:29

+0

什麼是您的RDBMS(SQL風格)?它是MS SQL Server嗎? – 2013-04-22 19:57:14

回答

5

這樣的聲音就是你要做的。

Progress = 
CASE WHEN [Column1] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column2] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column3] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column4] = 'Yes' THEN 1 ELSE 0 END 

對於每個「是」,這將返回0 + 1。

+0

工作!感謝您的及時迴應。爲我節省了一大堆時間:-) – user1886816 2013-04-22 19:56:16

+0

@ user1886816沒問題。好的提示是總是嘗試在單個CASE語句中包含一個且僅有的一個值。 4列= 4例。 – 2013-04-22 19:57:28

1

在SQL Server:

SELECT * 
FROM mytable 
CROSS APPLY 
     (
     SELECT COALESCE(SUM(CASE val WHEN 'yes' THEN 1 END), 0) 
     FROM (VALUES (NULL)) q(v) 
     UNPIVOT 
       (
       val FOR col IN 
       (column1, column2, column3, column4) 
       ) c 
     ) q (progress) 

SQLFiddle

+0

哇!謝謝,但那正好在我頭頂上:-( – user1886816 2013-04-22 20:58:46