假设我通过连接多个表来获得SQL查询的结果数据集,如下所示:
Class_Name Roll_No Student_Name Fee_Type Fee_Name Amount
---------- ------- ------------ ---------- ---------- ------
Class_1 101 abc Fee_Type_1 Fee_1 100
Class_1 101 abc Fee_Type_1 Fee_2 200
Class_1 101 abc Fee_Type_1 Fee_3 500
Class_1 101 abc Fee_Type_2 Fee_4 300
Class_1 101 abc Fee_Type_1 Fee_5 400
Class_1 102 xyz Fee_Type_1 Fee_1 100
Class_1 102 xyz Fee_Type_1 Fee_2 100
Class_1 102 xyz Fee_Type_2 Fee_4 300
Class_1 102 xyz Fee_Type_2 Fee_5 400
Class_2 201 mno Fee_Type_1 Fee_1 200
Class_2 201 mno Fee_Type_1 Fee_2 200
Class_2 201 mno Fee_Type_1 Fee_3 500
Class_2 201 mno Fee_Type_2 Fee_4 300
Class_2 202 pqr Fee_Type_1 Fee_1 200
Class_2 202 pqr Fee_Type_1 Fee_2 100
Class_2 202 pqr Fee_Type_1 Fee_3 500
Class_2 202 pqr Fee_Type_2 Fee_4 300
Class_2 202 pqr Fee_Type_2 Fee_5 600
所需的输出格式如下
-----------------------------------------------------------------------------
| Fee_Type_1 | Fee_Type_2 | Student |
------------------------------------------------------------==============---------------============== Total |
Class_Name | Roll_No | Student_Name | Fee_1 | Fee_2 | Fee_3 | Type_Total | Fee_4 | Fee_5 | Type_Total | |
------------------------------------------------------------==============---------------==============----------
Class_1 | 101 | abc | 100 | 200 | 500 | 800 | 300 | 400 | 700 | 1500 |
| 102 | xyz | 100 | 100 | 0 | 200 | 300 | 300 | 600 | 800 |
-----------------------------------------------------------------------------------------------------------------
Class Total | 200 | 300 | 500 | 1000 | 600 | 700 | 1300 | 2300 |
-----------------------------------------------------------------------------------------------------------------
Class_2 | 201 | mno | 200 | 200 | 500 | 900 | 300 | 0 | 300 | 1200 |
| 202 | pqr | 200 | 100 | 500 | 800 | 300 | 600 | 900 | 1700 |
-----------------------------------------------------------------------------------------------------------------
Class Total | 400 | 300 | 1000 | 1700 | 600 | 600 | 1200 | 2900 |
-----------------------------------------------------------------------------------------------------------------
Fee Total | 600 | 600 | 1500 | 2700 | 1200 | 1300 | 2500 | 5200 |
-----------------------------------------------------------------------------------------------------------------
生成的SQL查询数据集是完全动态的,因此,列名称不能进行硬编码。
通过SQL或ASP.NET代码生成数据透视表并添加行(学生总计)和每个列和子分组(费用总计和类总计)的总数很容易实现,如上面给出的资源链接所述。 问题是在每一行中获取小计费用(在给定示例中,Fee_Type下的每个Fee_Name的Type_Total列(Fee_1 + Fee_2 + Fee_3和Fee_4 + Fee_5)。
如何将这些小计添加到动态数据中?
工具:MS-SQL Server 2008 R2和ASP.NET(.NET Framework 4.0)。所需的解决方案可以是SQL查询,SQL存储过程或C#/ VB.NET后端代码。
参考 我研究并实施了以下可用资源:
动态数据透视的ASP.NET参考:(A)Pivoting-DataTable-Simplified需要ABC Infotech,TPS软件等的子总数以及每行的所有列的总和,以及(B){{3需要服装,电子产品和食品项目的总数以及每行的所有列的总和。
用于列的ASP.NET参考和列的总计:Pivot-Grid-in-Asp-Net-MVC
动态SQL数据透视的SQL引用:(A)group-total-grand-total-in-grid-view和(B)t-sql-pivot-possibility-of-creating-table-columns-from-row-values
PS:无法使用任何报告软件,如Crystal Reports或Excel。