当前位置:首页 > 技术文章 > 正文内容

【Oracle】通过 rollup 和 grouping 函数生成报表

arlanguage2个月前 (03-19)技术文章8

文中使用的Oracle版本为11g。

记录一次之前工作中使用Oracle的rollupgrouping函数生成报表的经历。

临近下班时上级领导要求5分钟内要弄数据出来汇报(往往都是临下班才安排工作的),当时我拿到的模板格式是这样的,如下图:

看到报表结构时首先想到的是要将数据按照部门分组并按照月份做行转列处理。

至于“小计”嘛,大不了可以将前面12个月的列加起来解决(偷个懒)。

最大的问题就在于“合计”那一行,一开始想到的是使用group by + union all处理(实现思路:先将各部门数据统计成一个数据集,合计一行作为另一个数据集用group by统计起来,然后再用union all将两边的数据整合到一起)。

这样做虽然可以但感觉不太方便,后来发现Oracle中本来就提供了一个统计函数rollup来进行这样的统计,下面将结合语句说明一下。

其实rollup说白了就是“列”数据汇总,如果只是单纯的group by得出来的数据只是普通的分组数据集,如下图:

加上了rollup后数据集下面就会自动加上列的汇总统计行,也就是我们平常看到的合计一行,如下图:

虽然报表内容出来了,但是还缺少了一些东西,再对比一下模板就会发现在**“dept”一列最下应该要有“合计”两字,但最底一行是rollup**自动生成出来的要怎样将合计加上呢?

在这个时候grouping函数就出来了。

grouping函数有两个返回值1和0。若返回的是1则表示由于rollup函数所产生的空值对应的信息,返回0表示此行对应的这列参未与rollup函数分组汇总活动。下面是截取Oracle官方文档的说法:

“Using a single column as its argument, GROUPING returns 1 when it encounters a NULL value created by a ROLLUP or CUBE operation. That is, if the NULL indicates the row is a subtotal,GROUPING returns a 1. Any other type of value, including a stored NULL, returns a 0.”

因此在语句中使用case when + grouping函数对rollup字段进行修饰,若返回的是1则给它一个“合计”的中文,0则直接输出所以就出现了,如下图:

这段东西,最后得出的结果如下图所示:

大功告成。

扫描二维码推送至手机访问。

版权声明:本文由AR编程网发布,如需转载请注明出处。

本文链接:http://www.arlanguage.com/post/3407.html

分享给朋友:

“【Oracle】通过 rollup 和 grouping 函数生成报表” 的相关文章

Linux中内网或者没网时安装软件的两种方式

写在前面对于可以连接外网的服务器装软件,只要配置yum源就可以随便使用了但是对于内网来说,不能连接外网,一般情况下,管控平台只有上传的权限。尤其是一些涉密的岗位,比如电力,电信,军工之类的。今天和小伙伴聊聊内网服务器如何安装软件的问题。可事实是,唯恐暴露才华不足的卑怯的畏惧,和厌恶钻研刻苦的惰怠,就...

Nginx缓存设置教程

这篇文章主要介绍了Nginx缓存设置案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下在开发调试web的时候,经常会碰到因浏览器缓存(cache)而经常要去清空缓存或者强制刷新来测试的烦恼,提供下apache不缓存配置和nginx不缓存配置的设置。在...

nginx配置静态资源服务器 nginx配置静态资源服务器的方法

nginx服务器搭建在这就不过多的说明了,本内容主要是nginx静态资源服务器配置相关说明nginx配置location / :指所有的url请求都会去访问static下面的文件;指定url后缀要与文件目录后面的后缀一一对应有两种用法:root:绝对路径;alias: nginx安装目录中的stat...

Linux日志处理神器-Logrotate

Logrotate简介Logrotate是Linux中日志分割、压缩、清理的工具,一般CentOS默认都会安装该工具。logrotate运行原理logrotate依赖于anacron执行每小时、每天、每周或每月的定时任务,corn每个小时会扫描当前机器中定时任务执行状态。 logrotate运行依...

Nginx 最全操作——nginx配置(2)

nginx 配置基本结构main # 全局配置,对全局生效 ├── events # 配置影响 nginx 服务器或与用户的网络连接 ├── http # 配置代理,缓存,日志定义等绝大多数功能和第三方模块的配置 │ ├── upstream # 配置后端服务器具体地址,负...

nginx 使用 proxy_pass 代理 请求转发

例如本地80端口Nginx代理8088端口服务,同样是访问 http://127.0.0.1/endian/look配置1:location /endian/ {proxy_pass http://127.0.0.1:8088;}会访问被代理服务的: http://127.0.0.1:8088/en...