SQL Server中如何将多行费用数据按人员与类型汇总转列
在SQL Server中处理重复费用数据并实现行转列汇总
原始数据结构
| 人员 | 数值 | 类型 |
|---|---|---|
| John | 10 | TypeA |
| John | 10 | TypeA |
| John | 20 | TypeB |
| John | 20 | TypeB |
| Steve | 15 | TypeA |
| Steve | 15 | TypeA |
| Steve | 25 | TypeB |
| Steve | 25 | TypeB |
期望结果
| 人员 | TypeA | TypeB |
|---|---|---|
| John | 20 | 40 |
| Steve | 30 | 50 |
方法一:条件聚合(兼容性强,推荐)
逻辑清晰,适配所有SQL Server版本,适合类型固定的场景:
SELECT 人员, SUM(CASE WHEN 类型 = 'TypeA' THEN 数值 ELSE 0 END) AS TypeA, SUM(CASE WHEN 类型 = 'TypeB' THEN 数值 ELSE 0 END) AS TypeB FROM 你的表名 GROUP BY 人员;
方法二:PIVOT函数(SQL Server 2005+支持)
利用内置行转列函数实现,语法更简洁:
SELECT 人员, TypeA, TypeB FROM ( SELECT 人员, 数值, 类型 FROM 你的表名 ) AS SourceTable PIVOT ( SUM(数值) FOR 类型 IN (TypeA, TypeB) ) AS PivotTable;
说明
两种方法都会自动对重复数据求和汇总,执行时替换语句中的你的表名为实际表名即可。
内容的提问来源于stack exchange,提问作者MisterHow
相关产品推荐
相关产品推荐

