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

标签 sql sql-server t-sql 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 数据上运行。

最佳答案

使用 SUM 的简单 GROUP BY 查询应该已经满足您的需求:

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 值,因此只有存在的数字才会出现在总和中。

关于sql - 如何按日期查询结果调整 SQL 聚合以合并同一级别中某些列存在空值的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54016777/

相关文章:

sql - 将日期格式化为星期几

php - LEFT JOIN 过滤最近 30 天加入的推荐人,而不是最近 30 天加入的推荐人

sql-server - Angular 2创建新项目,和SQL

c# - 向 SQL Server 数据库中插入语句

sql - ORDER BY 几列中的 CASE

c# - C# 和 SQL 中的相同校验和

mysql - 计算的 MYSQL 列

c# - 尝试转换 SQL int -> c# int 时出现无效的转换异常?

sql - 与稍后提供的一起加入

MySQL查询协助