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