姓名 | 语文 | 数学 | ||
其中 | 期末 | 期中 | 期末 | |
张 | 12 | 2 | 44 | 55 |
李 | 24 | 2 | 55 | 5 |
对于交叉表的实现及多重表头的应用
本例所采用的交叉表的实现方式是建立在SQL的基础上,所以可能会由于使用的数据库不一致需要修改SQL,本例采用的是oracle9i,多重表头实现控件为C1FlexGrid。
首先看一个交叉表的SQL:
交叉表效果
本SQL是将一个学生成绩按课目,期中、期末进行统计,就能够实现以人名为汇总的按课目、期数的交叉表,在这个交叉表中会有一个缺陷
1)可能由于课目并非固定而此sql就需要动态构建
2)可能并非所有课目都会有期中、期末成绩,那么就需要只对有期中或期末成绩的课目按期数做汇总
为此,需要通过动态构造交叉表,可考虑使用存储过程或程序构造sql,本人用C#写了一个通用的构造sql函数,但目前只支持3层交叉表头
如上执行sql将会得到一个构造好的sql,由于本人还需要用它做多重表头,所以在考虑了字段名做了些标记,以‘#’,‘-’做表头名值转化,以下是使用C1FlexGrid实现对多重表头的构造