2013-04-22 13 views
5

Provare a creare una colonna calcolata che avrebbe un valore basato sui valori in altre quattro colonne. Colonna 1, Coulmn 2, colonna 3, Colonna 4 potrebbe essere Sì o No Il risultato finale nella colonna calcolata, diciamo chiama progresso, dovrebbe essere qualcosa su questa linea:Dichiarazione case SQL per aumentare il valore

Progress = CASE 
WHEN [Column1] = 'Yes' THEN Value+1 
WHEN [Column2] = 'Yes' THEN Value+1 
WHEN [Column3] = 'Yes' THEN Value+1 
WHEN [Column4] = 'Yes' THEN Value+1 
ELSE 0 END 

Spero che questo ha un senso come ovviamente la sintassi per quanto sopra non è corretta.

+0

quindi vuoi la somma di "Sì in quelle colonne? – cmd

+3

Si prega di fornire dati di esempio e risultati per chiarire cosa si vuole veramente. –

+0

Qual è il tuo RDBMS (sapore SQL)? È MS SQL Server? –

risposta

5

Suona come questo è quello che stai per.

Progress = 
CASE WHEN [Column1] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column2] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column3] = 'Yes' THEN 1 ELSE 0 END + 
CASE WHEN [Column4] = 'Yes' THEN 1 ELSE 0 END 

Questo restituirà 0 + 1 per ogni "Sì".

+0

Ha funzionato! Grazie per la pronta risposta. Mi ha risparmiato un sacco di irritazioni e tempo :-) – user1886816

+0

@ user1886816 Nessun problema. Un buon consiglio è cercare sempre di racchiudere uno e un solo valore all'interno di una singola istruzione CASE. 4 colonne = 4 casi. –

1

In SQL Server:

SELECT * 
FROM mytable 
CROSS APPLY 
     (
     SELECT COALESCE(SUM(CASE val WHEN 'yes' THEN 1 END), 0) 
     FROM (VALUES (NULL)) q(v) 
     UNPIVOT 
       (
       val FOR col IN 
       (column1, column2, column3, column4) 
       ) c 
     ) q (progress) 

Vedi SQLFiddle.

+0

Wow! Grazie, ma è andato proprio sopra la mia testa :-( – user1886816

Problemi correlati