2012-04-11 262 views
5

我需要寫一個case語句將返回Case語句值

「1 of 3」 if someone voted in one of three elections, 
「2 of 3」 if someone voted in two of three elections, 
「3 of 3」 if someone voted in three of three elections, 

的問題是,某些值是一個varchar,有些是零,我不能把它們加起來。 這是我的想法,但我無法讓它工作。

select 
id, 
CASE 
    WHEN race1 + race2 + race3 = 0 then '0-3' 
    WHEN race1 + race2 + race3 = 1 then '1-3' 
    WHEN race1 + race2 + race3 = 2 then '2-3' 
    WHEN race1 + race2 + race3 = 3 then '3-3' 
    WHEN race1 + race2 + race3 is null then 'Unknown' 
END AS General_Turnout 
from test4 

http://sqlfiddle.com/#!3/cac66/3

回答

9

這應該工作:

select 
id, 
    CAST((CASE WHEN race1 IS NOT NULL THEN 1 ELSE 0 END) 
    +(CASE WHEN race2 IS NOT NULL THEN 1 ELSE 0 END) 
    +(CASE WHEN race3 IS NOT NULL THEN 1 ELSE 0 END) AS CHAR) + '-3' 
AS General_Turnout 
from test4 
0

使用COELESCE(數值,0),以便空取爲零

+0

是的我試過IsNull(race1,0),所有和刪除空值並用0代替它們,但我仍然無法添加其餘的。謝謝 – user973671 2012-04-11 02:47:21

+0

你可以使用cast進行轉換。我想這個例子已經在上面給出了 – 2012-04-11 02:52:11

0

從你貼在SQLfiddle什麼,我想NULL表示未投票,任何字符串表示都投了。你不能添加列中的非數字字符串race1,race2和race3,但這應該工作:

SELECT 
    id, 
    CAST(
    CASE WHEN race1 IS NOT NULL then 1 ELSE 0 END + 
    CASE WHEN race2 IS NOT NULL then 1 ELSE 0 END + 
    CASE WHEN race3 IS NOT NULL then 1 ELSE 0 END 
    AS CHAR) + '-3' AS General_Turnout 
FROM test4