我被要求创建一个报告,该报告按照SQL数据库中单行的多列中的值进行分组。例如
Employee Name | Type1Column1 | Type1Column2 | Type2Column1 | Type2Column2
John Doe | 0.00 | 10.00 | 20.00 | 20.00
Report Output
Name | Type | Total
John Doe | Type1 | 10.00
| Type2 | 40.00
我希望你能得到这个想法,不,我没有设计表,不,我不能改变它,但我可能能够调整产生输出的存储过程......
我玩了一些想法,但我不知所措;我觉得需要某种计算的东西来反对,但我从来没有遇到过这种情况,因为我总是自己设计数据仓库和立方体。
有谁知道如何在SSRS 2008R2中实现这一目标?
提前致谢。
答案 0 :(得分:3)
您可以将UNPIVOT运算符应用于返回该输出的查询吗?
select
EmployeeName,
case
when Type like 'Type1%'
then 'Type1'
else 'Type2'
end TypeCol,
Total
from (select EmployeeName, Type1Column1, Type1Column2, Type2Column1, Type2Column2
from storedprocdata ) as f
unpivot (Total for Type in (Type1Column1, Type1Column2, Type2Column1, Type2Column2)
) as u
请注意,派生表f从名为storedprocdata的表中获取数据。主select语句中的case语句还允许您根据所需的不同类型对您明确的列进行分组。
然后,您可以在SSRS报告中的总计列上进行汇总。
答案 1 :(得分:1)
unpivot操作符应该更灵活,但是(扩展Jamie F对该问题的评论)可以通过设置5个详细行(每种类型一个)并将Total列的表达式设置为如:
=Fields!Type1Column1.Value+ Fields!Type1Column2.Value+ Fields!Type1Column3.Value+
Fields!Type1Column4.Value+ Fields!Type1Column5.Value+ Fields!Type1Column6.Value+
Fields!Type1Column7.Value
- 对于Type 1详细信息行,每个后续Type详细信息行具有相似的表达式。