在做报表时,经常会遇到在最后一行将前面所列出的值计算合计,这个时候你会怎么做呢?最初我的想法是再将原来些的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
合计 10394298913258.3
最后一行的值就是计算出合计的值。
使用rollup函数,计算出的合计是在最后一行。如果要想合计在第一行,则需要使用另外一个函数Cube函数。效果很是好呀!
另外需要说明的一点是,这两个函数在db2库中也可以使用。如果有那个db2的库用不了的话,那估计是db2软件版本太低喽!
分享到:
相关推荐
### 使用ROLLUP函数生成报表的小计、合计 在数据库查询操作中,经常需要对数据进行分组统计,并在此基础上进一步生成包含小计和总计的报表。这种需求在人力资源管理系统(如文中提到的eHR系统)以及其他各类业务...
总的来说,`ROLLUP` 提供了一种简便的方式,用于生成多层次的汇总数据,它可以用于复杂的分析和报表生成,尤其是在需要展示不同层次统计数据时非常有用。在实际应用中,可以根据需求结合`GROUP BY` 和 `CASE` 语句...
如果要在分组后添加总计行,可以使用ROLLUP运算符,它会自动生成所有可能的组合,包括总体总计。 4. **日期函数**: SQL Server提供了丰富的日期和时间函数,用于处理日期和时间值: - **DATEPART**:提取日期或...
使用CASE语句可以将NULL值替换为“合计”字样,以便更直观地表示总和。 2. **两级汇总,中间小计最后汇总** 如果同时对province和city字段进行GROUP BY ROLLUP,结果将按省份和城市分组,然后逐级向上汇总到城市...
在这个查询中,我们使用了`GROUP BY`语句配合`WITH ROLLUP`选项来实现小计和合计的功能。`GROUP BY`根据指定的列(BANK_ID和ID)对数据进行分组,`WITH ROLLUP`则会额外生成一个汇总行,提供总和。`CASE`语句用于...
- 当我们需要对数据按照某一字段或多个字段进行分类,并对每个类别进行统计时,就可以使用`GROUP BY`子句。例如,`SELECT 分组字段 FROM 表 GROUP BY 分组字段`会将数据按照`分组字段`的值进行划分。 - 要在分组后...