2012-04-11 40 views
5

tôi cần phải viết một tuyên bố trường hợp đó sẽ trở lạituyên bố trường hợp có thêm cột giá trị

“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, 

Vấn đề là một số giá trị là một varchar và một số là null và tôi không thể thêm chúng với nhau. Đây là ý tưởng của tôi nhưng tôi không thể làm cho nó hoạt động.

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

Trả lời

9

này nên làm việc:

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 sử dụng (giá trị, 0) để vô được thực hiện như là zero

+0

Có tôi đã thử IsNull (race1, 0), trên tất cả và loại bỏ giá trị null và thay thế chúng bằng 0, nhưng tôi vẫn không thể thêm phần còn lại. Cảm ơn – user973671

+0

Bạn có thể sử dụng tính năng truyền cho chuyển đổi.Tôi nghĩ rằng ví dụ đã được đưa ra ở trên –

0

Từ những gì bạn được đăng trên SQLfiddle, tôi giả NULL có nghĩa là không bỏ phiếu và bất kỳ chuỗi nào có nghĩa là đã bỏ phiếu. Bạn không thể thêm các chuỗi không phải số mà bạn có trong các cột race1, race2 và race3, nhưng điều này sẽ hoạt động:

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 
Các vấn đề liên quan