在SSRS中实现行转列:将分组SQL数据转换为宽表格式
实现思路:将分组统计数据转为宽表格式
一、SQL查询层面直接转换(推荐优先)
无需依赖SSRS,直接在数据源层面输出预期格式,报表可直接展示,两种常用写法:
1. 条件聚合写法
兼容性强,适配已知固定Status值的场景:
SELECT Sector, SUM(CASE WHEN Status = 'Expired' THEN Count ELSE 0 END) AS Expired, SUM(CASE WHEN Status = 'Valid' THEN Count ELSE 0 END) AS Valid, SUM(CASE WHEN Status = 'New' THEN Count ELSE 0 END) AS New, SUM(Count) AS Total FROM 你的原始查询结果表 GROUP BY Sector ORDER BY Sector
2. PIVOT函数写法
适用于支持PIVOT的SQL Server版本:
SELECT Sector, ISNULL(Expired, 0) AS Expired, ISNULL(Valid, 0) AS Valid, ISNULL(New, 0) AS New, (ISNULL(Expired,0) + ISNULL(Valid,0) + ISNULL(New,0)) AS Total FROM ( SELECT Sector, Status, Count FROM 你的原始查询结果表 ) AS SourceData PIVOT ( SUM(Count) FOR Status IN ([Expired], [Valid], [New]) ) AS PivotTable ORDER BY Sector
二、SSRS报表层面实现(基于原始数据源)
若需在SSRS内处理原始的Sector+Status多行数据,矩阵控件比表格分组更适配行转列需求:
- 步骤1:新建矩阵,将
Sector拖到「行组」区域 - 步骤2:将
Status拖到「列组」区域,手动固定列组成员为Expired、Valid、New(避免动态列) - 步骤3:将
Count拖到矩阵数据单元格,设置聚合方式为Sum - 步骤4:添加总计列:在矩阵右侧插入列,选择「总计-行」,单元格表达式设为
Sum(Fields!Count.Value) - 步骤5:调整列标题为固定的Expired、Valid、New,补充Total列标题
内容的提问来源于stack exchange,提问作者ShahidAliK
相关产品推荐
相关产品推荐

