Mam tabelę z listą wartości. -1 to pusta wartość:

 ID    FieldType1A FieldType1B FieldType2A FieldType2B Person
  1             15          14          10          -1      1
  2             16          -1          12          10      1
  3             17          -1           5           6      1
  4              6          -1           7          -1      2
 ...

Wynik powinien być:

 Person      FieldType1     FieldType2
      1               4              5
      2               1              1

Istnieje tabela użytkowników z listą identyfikatorów użytkowników, czy istniałby sposób na iterację po tej liście wartości w celu wygenerowania listy osób w zestawie wyników (0, jeśli typy pól są całkowicie poprawne, ponieważ są tylko zliczane)? Myślę, że odpowiedź na Liczba wartości kolumn T-SQL jest krokiem w moim kierunku Próbuję iść, ale nie jestem pewien, jak połączyć kolumny, które są takie same (A/B pozwalają na listę odpowiedzi). To i jestem zainteresowany połączeniem wszystkich prawidłowych wartości, ponieważ nie próbuję zliczyć liczby każdej prawidłowej odpowiedzi.

2
Robert 28 sierpień 2012, 18:25

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć wyrażenia CASE, aby zmienić wszystkie wartości nieujemne na 1, a wartości -1 na 0, a następnie je zsumować.

SELECT Person, 
    SUM(CASE WHEN FieldType1A <> -1 THEN 1 ELSE 0 END) + 
        SUM(CASE WHEN FieldType1B <> -1 THEN 1 ELSE 0 END) AS FieldType1,
    SUM(CASE WHEN FieldType2A <> -1 THEN 1 ELSE 0 END) + 
        SUM(CASE WHEN FieldType2B <> -1 THEN 1 ELSE 0 END) AS FieldType2
FROM YourTable
GROUP BY Person
4
LittleBobbyTables - Au Revoir 28 sierpień 2012, 18:32
SELECT Person, 
count(nullif(FieldType1A, -1)) + count(nullif(FieldType1B, -1)) as FieldType1, 
count(nullif(FieldType2A, -1)) + count(nullif(FieldType2B, -1)) as FieldType2
FROM yourtable
GROUP BY person
2
t-clausen.dk 28 sierpień 2012, 18:37