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

如何根据日期查询结果调整SQL聚合以合并同一级别的值,其中某些列存在空值,sql,sql-server,tsql,aggregate,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 | 我有上表数据,但我希望在按日期聚合数据(如总和)时,结果如下所示: 在我努力实现这一目标时,有没有办法做到这一点 注意

很抱歉标题太乱,但这是我的问题描述

| id|dateKey|colA|colB|colD|colE|
+---+-------+----+----+----+----+
| 1 |180111 | 1  | 5  |Null|Null|
| 2 |180111 |Null|Null| 6  | 7  |
| 3 |180111 | 2  | 5  | 3  | 2  |  
我有上表数据,但我希望在按日期聚合数据(如总和)时,结果如下所示:

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


注意:此查询将在带有日期筛选器的10 Gb数据上运行。

使用
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
值,因此只有存在的数字应该在SUM中结束。

您也可以使用
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;

您有一个示例查询吗?您可以使用coalesce将空记录或空记录转换为零。您可以找到答案并对其进行实时演示-
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;