2012-04-11 33 views
5

Ben bazı değerler varchar ve bazı boş olan ve bir araya ekleyemezsinizVaka bildirimi

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

sorundur dönecektir case ifadesi yazmak gerekir değer verir. Bu benim fikrim ama işe yaramayacağım.

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

cevap

9

olarak alınmıştır böylece:

Eğer SQLfiddle yayınlanan kadarıyla
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

kullanım COELESCE (değer, 0) şeklindeki sıfır Bu çalışmalıdır sıfır

+0

Evet (race1, 0), tümü üzerinde IsNull çalıştı ve bu boş değerler kaldırır ve bunları 0 ile değiştirir, ancak yine de kalanı ekleyemem. Teşekkürler – user973671

+0

Dönüştürme için döküm kullanabilirsiniz. Bence bu örnek yukarıda verilmiştir. –

0

sanırım NULL, 'un numaralı oyunu seçmediğini ve numaralı herhangi bir dizenin numaralı oyu kullandığını gösterir. Sen sütunlar race1, race2 ve race3 sahip sayısal olmayan dizeler ekleyemezsiniz, ancak bu çalışması gerekir:

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