2012-04-11 3 views
5

Ich brauche eine Case-Anweisung zu schreiben, dieCase-Anweisung, die Spalte fügt Werte

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

Das Problem ist, dass einige der Werte sind ein varchar zurück und einige sind null und ich kann sie nicht zusammen fügen. Das ist meine Idee, aber ich kann es nicht zur Arbeit bringen.

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

Antwort

9

Diese Arbeit sollte:

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

Verwendung COELESCE (Wert, 0), so daß Null als Null genommen

+0

Ja, ich versuchte IsNull (Race1, 0), auf alle und entfernt die Nullwerte und ersetzt sie mit 0, aber ich kann den Rest noch nicht hinzufügen. Danke – user973671

+0

Sie können Cast für die Konvertierung verwenden. Ich denke, das Beispiel ist bereits oben angegeben –

0

Von dem, was Sie auf SQLfiddle geschrieben, nehme ich an NULL bedeutet hat nicht abgestimmt und eine beliebige Zeichenfolge bedeutet hat stimmen. Sie können die nicht-numerischen Strings fügen Sie in den Spalten Race1 haben, race2 und Rasse 3, aber dies sollte funktionieren:

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 
Verwandte Themen