根据凭证表生成余额的SQL(我已实现,但数据量小的时候还可以,现在凭证行数约十万行,所以非常慢!)
凭证表(含主表日期后的视图):方向(1借,-1贷)凭证ID  日期       科目ID 方向  金额 核算项目A 核算项目B 核算项目C......
1     2009-1-1   1001   1   300   a
1     2009-1-1   1002   -1  300               b
...........由于需要精确到天数,所以没有做结存表结转的方式.生成结果如下:
外部条件定义日期  2009-3-1到2009-3-6 被定义为本期科目ID  期初金额  本期借方  本期贷方  期末余额也可能会因为用户的分组成科目ID 核算项目A... 期初金额  本期借方  本期贷方  期末余额如果有父级则父级的汇总包含子级.
说明:
2009-3-1以前的数据为期初
2009-3-1到2009-3-6为本期,根据借贷方填充借方或贷方
期末余额为:期初+借方-贷方(事实上需要根据科目余额方向,但这里只要这样能高效实现就万事大吉了)主要是比较好的实现,能提升速度就OK了
万分感谢!

解决方案 »

  1.   

    如果是这样的需求,数据量一大就没有必要考虑效率了.
      

  2.   

    如果这样的需求,建议将各期的数据放进临时表,然后根据各临时表关联查询,不要用子查询,这样查询速度应该会快很多.
      

  3.   

    创建临时表,然后关联在存储过程中去实现.
      

  4.   

    数据量大,速度当然慢,可考虑,周期性的将一些数据放入临时表中(只征对固定查询逻辑的,建索引什么的常识应该不用提了),目的主要就是减少每次查询时的数据量
      

  5.   

    建议做月结计期初,如果数据量小,则直接统计更简单
    再根据期初计结余
      

  6.   

    综合一下差不多了
    索引
    定期汇总,从中计算得到期初,以减少期初的计算
    数据查询时多用临时表,尽量不用子查询等效率低的设计