2013-04-22 19 views
5

Próba utworzenia kolumny obliczeniowej, która miałaby wartość opartą na wartościach w czterech innych kolumnach. Kolumna 1, Coulmn 2, kolumna 3, kolumna 4 może być Tak lub Nie Wynik końcowy w kolumnie obliczeniowej, powiedzmy o nazwie Progress, powinno być coś wzdłuż tej linii:SQL Case Statement to Increment Value

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 

nadzieję, że to ma sens ponieważ oczywiście składnia powyższego nie jest poprawna.

+0

, więc chcesz sumę "Tak w tych kolumnach? – cmd

+3

Proszę podać przykładowe dane i wyniki, aby wyjaśnić, czego naprawdę chcesz. –

+0

Jaki jest Twój RDBMS (smak SQL)? Czy to jest MS SQL Server? –

Odpowiedz

5

Wygląda na to, że tak właśnie się dzieje.

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 

Spowoduje to wyświetlenie 0 + 1 dla każdego "Tak".

+0

To działało! Dzięki za szybką odpowiedź. Uratował mi całą masę kłopotów i czasu :-) – user1886816

+0

@ user1886816 Bez problemu. Dobrą wskazówką jest zawsze starać się zamknąć jedną i tylko jedną wartość w ramach jednej instrukcji CASE. 4 kolumny = 4 skrzynki. –

1

W 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) 

Zobacz SQLFiddle.

+0

Wow! Dzięki, ale to poszło tuż nad moją głową :-( – user1886816