2012-04-11 13 views
5

Ho bisogno di scrivere una dichiarazione caso che restituiràistruzione Case che aggiunge colonna Valori

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

Il problema è che alcuni dei valori sono una varchar e alcuni sono nulli e non posso aggiungere insieme. Questa è la mia idea ma non riesco a farlo funzionare.

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

risposta

9

Questo dovrebbe funzionare:

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

uso COELESCE (valore, 0) in modo che nulla è preso come zero

+0

Sì ho cercato IsNull (gara1, 0), su tutti e che rimuove i valori nulli e li sostituisce con 0, ma non riesco ancora ad aggiungere il resto. Grazie – user973671

+0

Puoi utilizzare il cast per la conversione. Penso che l'esempio sia già stato dato sopra –

0

Da quello che hai postato su SQLfiddle, suppongo NULL significa non ha votato e qualsiasi stringa significa ha votato. Non è possibile aggiungere le stringhe non numerici che avete in colonne gara1, gara2 e razza 3, ma questo dovrebbe funzionare:

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 
Problemi correlati