使用rollup函数统计报表合计

本文介绍了一种使用Oracle的Rollup函数简化报表合计计算的方法。Rollup函数能够直接在查询结果中添加合计行,避免了额外的SQL编写工作,并减少了数据库的压力。此外,还提到了另一种类似的Cube函数,可以改变合计行的位置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值