“报表统计,舍我其谁?!”

前段时间,一直在做报表统计,很有收获。这是我第一次编写报表统计相关的程序,从最初的惶恐,到过程中的点点揪心,到最后完成工作的舒心,一路走来,别有一番滋味在心头。有句话说:“痛快”何以为“快”?全因“痛”字在先。痛过之后的快乐,岂是“欢快”所能比?如是这般,这回,我算是“痛快”了一回。从这篇文章题目你也可看出,我现在该有多“痛快”。是的,我就这样,当我感觉自己在某个方面有那么点收获,我就无法抑制内心的兴奋,变得狂妄,一点也不知道收敛。

 “独乐乐,与众乐乐,孰乐?”这份痛快,不敢独享,遂拿出自己做报表统计的一些体会,与大家分享。在这里,我也得感谢qwLiang,没有他的指导参谋,我可能跌倒在了起跑线。感谢dcdingclyin,他们给与了我充分的信任,并给了我足够的时间来思考碰到的问题,没有这么长时间一点一点的“磨”,我不会有这么多的认识和体会,不会思考那么多。

 

    首先说明,我的统计不是利用sql语句实现的,而是在程序中实现的。我要统计的报表都是二维报表,解决方案的大致思路是把二维报表看作是一个矩阵,然后通过遍历查询出来的结果集,对每一条记录分析应该对二维报表的哪一行,哪一列进行累加操作。这样做的好处在于我们不再需要对每个单元格建立一条查询语句,由于得到哪一行,哪一列都是变量表示,使得我们的代码具有很大的伸缩性,我们不用维护那么多条sql语句。好吧,下面我将详细介绍我的问题和解决方案。下面的这个报表是我这次进行报表统计过程中的一个,我作了一些精简,去掉了几行,目的是要清晰的说明问题了。

     1 要统计的报表举例:

学生变动统计                                                               单位:人

上学年初报表在校学生数

      

       

本学年初报表在校学生数

退

死亡

非正常

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

01

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

其中

02

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

少数民族

03

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

说明: 1、“招生”、“在校生”数应与表3-1相关数据对应相等。 2、本表列关系为(16=1+2-7);(2)=(3)++(6);(7)=(8)+(9+(10)+(11)+(12)+(14)+15)。

   2 解决方案

 

   具体的展现形式先不用管,我们要有这样一个观念,统计是负责把数据库中的满足我们条件的数据查找出来,然后进行累加,报表展示是页面的展示形式,这两者是可以分离开来的。故此,我们可以把它根据关系数据库规范化理论第一范式,把这个报表“规范化”,变成一个矩阵。具体来说就是下面这样一个形式:

 

上学年初报表在校学生数

增加总计

 

招生

复学

转入

其他

减少总计

退

死亡总计

非正常死亡

转出

其他

本学年初报表在校学生数

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

 

01

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

02