TSQL按id与type分组求和并转置为指定列的实现需求
TSQL实现分组求和并转置列
针对你的需求,我们可以通过分组求和结合条件聚合或者PIVOT运算符来实现,这里给你两种常用的方案:
方案一:使用条件聚合(灵活适配固定列场景)
这种方式直接通过CASE语句判断type值,对每个type对应的number求和,没有匹配的返回0:
SELECT id, SUM(CASE WHEN type = 111 THEN number ELSE 0 END) AS type111, SUM(CASE WHEN type = 112 THEN number ELSE 0 END) AS type112, SUM(CASE WHEN type = 113 THEN number ELSE 0 END) AS type113 FROM Table1 GROUP BY id ORDER BY id;
方案二:使用PIVOT运算符(简洁的转置语法)
先通过子查询对id和type分组求和,再用PIVOT将type值转成列,最后用ISNULL把空值替换为0:
SELECT id, ISNULL([111], 0) AS type111, ISNULL([112], 0) AS type112, ISNULL([113], 0) AS type113 FROM ( SELECT id, type, SUM(number) AS total_number FROM Table1 GROUP BY id, type ) AS SourceTable PIVOT ( SUM(total_number) FOR type IN ([111], [112], [113]) ) AS PivotTable ORDER BY id;
补充说明
- 两种方案都能输出你期望的结果:按
id分组,每个type对应的求和值作为列,无数据的type列显示0。 - 条件聚合的优势是后续调整列逻辑时,直接修改
CASE语句即可,灵活性更高;PIVOT则语法更简洁,适合标准的转置场景。
内容的提问来源于stack exchange,提问作者Cem Altunsoy
相关产品推荐
相关产品推荐

