在做报表时,经常会遇到在最后一行将前面所列出的值计算合计,这个时候你会怎么做呢?最初我的想法是再将原来些的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软件版本太低喽!