SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,总计(合计),小计
版权声明:本文为博主原创文章,未经博主允许不得转载。本人观点或有不当之处,请在评论中及时指正,我会在第一时间内修改。 https://blog.csdn.net/aiming66/article/details/80717802
在工作中遇到了这样的一个问题,就是需要将查询出来的数据进行分类汇总。这里用到了with rollup。下面是效果图。
这里写图片描述
为了得到这样的效果,我们该如何做呢,我们来做这个小demo。
数据库字样
这里写图片描述
需求分析
本实例为demo,没有任何意义。仅仅是为了完成功能。
1、依次按照住址,部门,性别三个条件进行汇总,汇总出他们的月薪总金额,和纳税总金额。
代码实现1——依次按照住址,部门,性别三个条件显示他们的每人详细信息
select
emp.address as 住址,
emp.dep as 部门,
case when emp.sex='1' then '男'else '女' end as 性别,
emp.name as 姓名,
emp.monthly_pay as 税前月薪,
emp.monthly_pay *emp.rate_duty as 纳税金额,
emp.monthly_pay *(1-emp.rate_duty) as 实际月薪金额
from Employees emp
order by
emp.address ,
emp.dep ,
emp.sex
1
2
3
4
5
6
7
8
9
10
11
12
13
效果如下:
这里写图片描述
代码实现1——依次按照住址,部门,性别三个条件进行分类汇总
select
CASE WHEN grouping(emp.address) = '1' THEN '总计'
WHEN grouping(emp.address) = '0' AND grouping(emp.dep) = '1' THEN emp.address + '小计'
ELSE emp.address
END 住址,
--------------------------------------
CASE WHEN grouping(emp.dep) = '1' THEN ''
WHEN grouping(emp.dep) = '0' AND grouping(emp.sex) = '1' THEN emp.dep + '小计'
ELSE emp.dep
END 部门,
------------------------------------------------------------------
case when emp.sex='1' then '男' when emp.sex='0' then '女' end as 性别,
sum(cast(emp.monthly_pay as int)) as 税前月薪,
sum(emp.monthly_pay *emp.rate_duty) as 纳税金额,
sum(emp.monthly_pay *(1-emp.rate_duty) )as 实际月薪金额
from Employees emp
group by
emp.address,
emp.dep,
emp.sex
with rollup
order by
emp.address desc,
emp.dep desc,
emp.sex desc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
效果图:
这里写图片描述
总结:
1、with rollup 要和case when 一起搭配使用。
2、因为使用with rollup 要用到group by 进行分组,所以这样的汇总必须结合聚合函数,比如,sum ,max等等。常用的聚合函数参考菜鸟教程:http://www.runoob.com/sqlite/sqlite-functions.html
3、对于汇总,强烈建议,使用“小计”,“总计”这样的字,坚决不建议使用“合计”。因为从代码中我们可以看出来,我们使用了order by ,order by 是以汉字拼音排序的,有的是时候就容易出不来效果,尤其是,我们汇总完了再进行分页的时候。(小编因为这个问题,曾经郁闷了一个下午)
demo 数据库和sql脚本下载地址:
https://download.csdn.net/download/aiming66/10483246
---------------------
作者:aiming66
来源:CSDN
原文:https://blog.csdn.net/aiming66/article/details/80717802
版权声明:本文为博主原创文章,转载请附上博文链接!
SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,总计(合计),小计的更多相关文章
- SQLSERVER 使用 ROLLUP 汇总数据,实现分组统计,合计,小计
表结构: CREATE TABLE [dbo].[Students]( ,) NOT NULL, ) NULL, [Sex] [int] NOT NULL, ) NULL, ) NULL, , ) N ...
- 常用sql:按照表中的某一列对数据进行分组,统计数据条数
select FROM_UNIXTIME(start_time,'%Y-%m-%d')as date,COUNT(*) FROM random_num GROUP BY FROM_UNIXTIME(s ...
- 【SQL】面面俱到 | 在SQL中使用CUBE和ROLLUP实现数据多维汇总
偶然在网上看到一篇文章,讲到数据汇总,提到了CUBE,感觉有些晦涩,想试着自己表述一下.同时,个人也认为CUBE还是很有用的,对SQL或数据分析感兴趣的小伙伴不妨了解一下,或许有用呢! 先设定个需求, ...
- sql server 分组统计数据
说明:group by是sql中对数据表中的数据进行分组的,在select列表中出现的字段必须全部出现在group by 字段中,出现在聚合函数中的字段在group by中可有可无,没有出现在sele ...
- C# Linq及Lamda表达式实战应用之 GroupBy 分组统计
在项目中做统计图表的时候,需要对查询出来的列表数据进行分组统计,首先想到的是避免频繁去操作数据库可以使用 Linq eg: //例如对列表中的Cu元素进行按年GroupBy分组统计 //包含年份,平均 ...
- Mysql按日、周、月进行分组统计
我们在用 Mysql 制作数据可视化图表时候,经常需要按照天.周.月等不同的粒度对数据进行分组统计.而我们的时间可能是 “2017/12/5 0:0:0” 这种准确的时间. 所以在进行分组之前我们需要 ...
- 用SQL实现统计报表中的"小计"与"合计"的方法详解
本篇文章是对使用SQL实现统计报表中的"小计"与"合计"的方法进行了详细的分析介绍,需要的朋友参考下 客户提出需求,针对某一列分组加上小计,合计汇总.网上找 ...
- ORACLE的分组统计之ROLLUP(一)
Oracle 9i以后,扩展了group by 的功能,能够满足大部分多维数据的分析统计功能,主要表现: 1. rollup,cube,grouping sets 扩展group by字句提供了丰富的 ...
- R语言︱数据分组统计函数族——apply族用法与心得
每每以为攀得众山小,可.每每又切实来到起点,大牛们,缓缓脚步来俺笔记葩分享一下吧,please~ --------------------------- 笔者寄语:apply族功能强大,实用,可以代替 ...
随机推荐
- CentOS6.5(3)----设置自己安装的程序开机自动启动
CentOS6.5系统下设置自己安装的程序开机自动启动 方法1. 把启动程序的命令添加到 /etc/rc.d/rc.local 文件中,比如设置开机启动 mysqld: #!/bin/sh # # T ...
- 02_Netty实现的Echo服务器和客户端
[Echo服务端] [EchoServer] public class EchoServer { private final int port; public EchoServer(int port) ...
- Android解析WindowManager(二)Window的属性
前言 在上一篇文章我们学习了WindowManager体系,了解了Window和WindowManager之间的关系,这一篇我们接着来学习Window的属性. 1.概述 上一篇文章中我们讲过了Wind ...
- 养兔子Fibo函数优化
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 记作为前端开发人员跑去面试C#.NET
先谈结果,"秦总",与我面试讨论一个半小时,十分感动,然后拒绝了我. 本月17日16时许,收到邀请,于18日9时到司面试,虽如今仅深入前端领域,皆因曾有1年ASP.NET(C#)的 ...
- Mycat中间件
数据库中间件Mycat自我介绍 一.mycat概述 1.功能介绍 mycat一个开源的分布式数据库系统,是一个实现了mysql协议的server前端用户可以把它看成一个数据库代理,用mysql客户端工 ...
- cmd命令提示符大全(干货)
cmd是command的缩写.即命令提示符(CMD),是在OS / 2 , Windows CE与Windows NT平台为基础的操作系统(包括Windows 2000和XP中, Vista中,和Se ...
- January 09 2017 Week 2nd Monday
Patience is bitter, but its fruit is sweet. 忍耐是痛苦的,但它的果实是甜蜜的. Some patience may be just fruitless, o ...
- JavaScript正则表达式_常用的正则
一.检查邮政编码 var pattern = /[1-9][0-9]{5}/; //共 6 位数字,第一位不能为0 {5}表示后面5位0到9 var str = '224000'; alert(pa ...
- SVM中为何间隔边界的值为正负1
在WB二面中,问到让讲一下SVM算法. 我回答的时候,直接答道线性分隔面将样本分为正负两类,取平行于线性切割面的两个面作为间隔边界,分别为:wx+b=1和wx+ b = -1. 面试官就问,为什么是正 ...