2012-04-11 8 views
5

내가 일부 값은 VARCHAR이고 일부가 null이며, 내가 그들을 함께 추가 할 수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, 

문제가 반환하는 경우 문을 작성해야 값. 이것은 제 생각이지만 작동시키지 못합니다.

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

으로 간주되도록 :

당신이 SQLfiddle에 게시 된 것과
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)이 널 (null)이 작동합니다 제로

+0

예 내가 (race1, 0), 모두에 ISNULL을 시도하고는 null 값을 제거 그것들을 0으로 바꾼다. 그러나 나는 여전히 나머지를 추가 할 수 없다. 감사합니다 – user973671

+0

당신은 변환을 위해 캐스트를 사용할 수 있습니다. 나는 예제가 이미 위에서 주어진 것 –

0

, 나는 가정 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