子列总数

时间:2015-10-07 21:38:34

标签: c# asp.net vb.net sql-server-2008 pivot

假设我通过连接多个表来获得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后端代码。

参考 我研究并实施了以下可用资源:

  1. 动态数据透视的ASP.NET参考:(A)Pivoting-DataTable-Simplified需要ABC Infotech,TPS软件等的子总数以及每行的所有列的总和,以及(B){{3需要服装,电子产品和食品项目的总数以及每行的所有列的总和。

  2. 用于列的ASP.NET参考和列的总计:Pivot-Grid-in-Asp-Net-MVC

  3. 动态SQL数据透视的SQL引用:(A)group-total-grand-total-in-grid-view和(B)t-sql-pivot-possibility-of-creating-table-columns-from-row-values

  4. PS:无法使用任何报告软件,如Crystal Reports或Excel。

0 个答案:

没有答案