Bootstrap

使用rollup函数统计报表合计

在做报表时,经常会遇到在最后一行将前面所列出的值计算合计,这个时候你会怎么做呢?最初我的想法是再将原来些的sql稍作一些修改,然后求和。这样最起码算出来的数据会比较准确。但这样对数据库压力也比较大,另外以后如果需求有所变动,修改起来也比较麻烦,维护也比较麻烦。l另外一种做法跟这个比较来说,差不多类似。只不过是将需要查询的表都写到一个临时的表中,然后通过union将两个数据合并起来。但这个也会有像第一中的情况。那有没有更简单的方法来实现列算合计呢?

在我苦苦做了几次报表后,经邱tx指点,发现oracle有个rollup函数支持这种求和的运算。rollup函数属于oracle的分析函数。rollup即在某分组上面,有组的合计统计,对一个结果集进行汇总操作。

具体使用方法如下:
select nvl(to_char(r.user_id), '合计') as userId,
sum(r.duration) duration
from crm_call_rec r
group by rollup(r.user_id);


统计出来效果如下:
userId duration

1 1 10394298899954.1
2 574 1224.956
3 10001
4 14806 13.234
5 19765 163.672
6 97037 11902.351
7 [color=red]合计 10394298913258.3[/color]
最后一行的值就是计算出合计的值。

使用rollup函数,计算出的合计是在最后一行。如果要想合计在第一行,则需要使用另外一个函数Cube函数。效果很是好呀!

另外需要说明的一点是,这两个函数在db2库中也可以使用。如果有那个db2的库用不了的话,那估计是db2软件版本太低喽!
;