如何按日期查询结果调整SQL聚合以合并某些列中存在空值的同一级别的值

时间:2019-01-03 05:27:16

标签: sql sql-server tsql aggregate

对不起,标题混乱,但这是我的问题描述。

| id|dateKey|colA|colB|colD|colE|
+---+-------+----+----+----+----+
| 1 |180111 | 1  | 5  |Null|Null|
| 2 |180111 |Null|Null| 6  | 7  |
| 3 |180111 | 2  | 5  | 3  | 2  |  

我具有上述表格数据,但是当按日期汇总(例如,总和)数据时,我希望结果显示如下:

|dateKey|colA|colB|colD|colE|
+-------+----+----+----+----+
|180111 | 3  | 10 |9   |9   |

在努力实现目标时,有没有办法做到这一点?

注意:此查询将在具有日期过滤器的10 Gb数据上运行。

2 个答案:

答案 0 :(得分:3)

带有SUM的简单SELECT dateKey, SUM(colA) AS colA, SUM(colB) AS colB, SUM(colD) AS colD, SUM(colE) AS colE FROM yourTable GROUP BY dateKey; 查询应该已经满足您的需求:

SUM

之所以可行,是因为NULL默认情况下会忽略pageVisibilityTracker值,因此只有存在的数字才应以总和结束。

答案 1 :(得分:1)

您还可以使用ISNULL忽略null并将其转换为零,如下所示。

create table #temp (id int, dateKey int, colA int, colB int, colD int, colE int)
insert into #temp values (1,180111, 1 , 5 ,Null,Null),
( 2,180111, Null  , Null  , 6 , 7 ),
( 3,180111, 2 , 5 , 3 , 2  )

SELECT
    dateKey,
    SUM(ISNULL(colA,0)) AS colA,
    SUM(ISNULL(colB,0)) AS colB,
    SUM(ISNULL(colD,0)) AS colD,
    SUM(ISNULL(colE,0)) AS colE
FROM #temp
GROUP BY dateKey;