问题来源:http://bbs.csdn.net/topics/391012377 。
表1(tb1)中部分源数据如下:
Prjno Subtask Ddate Num
P9996 P9996-sub002 2015-01-01 123
P9996 P9996-sub002 2015-01-02 134
P9996 P9996-sub002 2015-01-03 345
P9996 P9996-sub002 2015-01-04 55
T0071 T-007-01 2015-01-01 3333
T0071 T-007-01 2015-01-02 356
T0071 T-007-01 2015-01-03 178
现需要根据输入的日期参数查询当月该日期前所有日期的项目总和,如输入2015-01-03希望得到:
Prjno Subtask 2015-01-01 2015-01-02 2015-01-03
P9996 P9996-sub002 123 134 345
T0071 T-007-01 3333 356 178
集算器实现代码如下:
A1:查询月初到指定日期的的数据,其中d_date为输入的日期参数,如2015-01-03;pdate@m(d_date)计算当月首日;
A2:根据月初到当前日所有日期序列生成动态列结果空序表,如下:
A3:代码前半句A1.group(Prjno,Subtask)首先按照Prjno,Subtask分组(集算器的分组会保存每组的明细),再使用~.groups(Ddate;sum(Num):Num)循环每个分组按日期分组汇总Num值,最后A2.record()将分组名称和汇总值写回A2的结果序表中,得到最终结果:
集算器可被报表工具或java程序调用,调用的方法也和普通数据库相似,使用它提供的JDBC接口即可向java主程序返回ResultSet形式的计算结果,具体方法可参考相关文档。