添加列值的Case语句

use*_*671 5 sql case sql-server-2008

我需要编写一个将返回的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, 
Run Code Online (Sandbox Code Playgroud)

问题是有些值是varchar而有些是null,我无法将它们添加到一起.这是我的想法,但我不能让它工作.

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
Run Code Online (Sandbox Code Playgroud)

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

das*_*ght 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
Run Code Online (Sandbox Code Playgroud)