Условная сумма T-SQL - PullRequest
       64

Условная сумма T-SQL

5 голосов
/ 14 января 2011

У меня есть таблица в этом формате

COL1 COL2 COL3
A    NULL  4
A    NULL  4
A    VAL1  4
A    VAL2  4
A    VAL3  4
B    NULL  5
B    VAL1  6

Мне нужно вывести вывод следующим образом:

COL1 TOTAL VALID
A    20     12
B    11     6

Мой вопрос: как мне получить столбец «VALID» - он должен делать сумму col3, только если col2 не равен нулю.

Мне удалось правильно получить поле 'TOTAL', используя SUM и group by. Но как мне вычислить столбец «VALID»?

Есть идеи? Большое спасибо!

Ответы [ 3 ]

16 голосов
/ 14 января 2011

Примерно так:

SELECT col1
     , SUM(col3) AS TOTAL
     , SUM(CASE WHEN col2 IS NOT NULL THEN col3 ELSE NULL END) AS VALID
  FROM mytable
 GROUP BY col1

«Хитрость» заключается в использовании выражения CASE для условного возврата значения col3.

0 голосов
/ 14 января 2011

Это должно работать ...

SELECT B.COL1, SUM(A.COL3) AS TOTAL, SUM(B.COL3) AS VALID
FROM 
(SELECT COL1, COL3 FROM ORIGINAL WHERE COL2 IS NULL) A
INNER JOIN (SELECT COL1, COL3 FROM ORIGINAL) B ON A.COL1 = B.COL1
0 голосов
/ 14 января 2011

Вы можете использовать подзапрос:

SELECT SUM(Col3) AS Total, 
       (SELECT SUM(Filtered.Col3) 
        FROM table Filtered 
        WHERE Filtered.Col1 = Grouped.Col1 
          AND Filtered.Col2 IS NOT NULL
       ) AS Valid
FROM table Grouped
GROUP BY Col1
...