从单行数据创建多个报告行

时间:2012-03-06 22:48:48

标签: tsql reporting-services ssrs-2008 ssrs-grouping

我被要求创建一个报告,该报告按照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中实现这一目标?

提前致谢。

2 个答案:

答案 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详细信息行具有相似的表达式。