条件SUM T-SQL

时间:2011-01-14 15:22:35

标签: sql null sum aggregate-functions

我有一个这种格式的表

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'列 - 只有当col2不为空时才应该使用col3的总和。

我能够使用SUM和group by子句正确获取'TOTAL'字段。但是如何计算'VALID'列呢?

有什么想法吗? 非常感谢!

3 个答案:

答案 0 :(得分:15)

这样的事情:

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的值。

答案 1 :(得分:0)

您可以使用子查询:

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

答案 2 :(得分:-1)

这应该有用......

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