SQL Server WITH ROLLUP、WITH CUBE、GROUPING语句的应用
CUBE:CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
ROLLUP:ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
GROUPING:当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1;当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0。
先创建一个临时表:
create table #temp
(
姓名 varchar(50) not null,
课程 varchar(50) null,
分数 int null
) insert into #temp
select '小红','SQL','' union
select '小红','C#','' union
select '小明','SQL','' union
select '小明','C#','' union
select '小李','SQL','' union
select '小李','C#',null select * from #temp

WITH CUBE:
select 姓名,课程,sum(分数)
from #temp
group by 姓名,课程
with cube

先以姓名分组和课程组合,再以姓名和课程分组进行组合。
PS:分类依据并不是根据select 中的顺序,而是根据group by中的顺序。
下面换个顺序看看结果:
select 姓名,课程,sum(分数)
from #temp
group by 课程,姓名
with cube

先以课程分组和姓名组合,再以课程和姓名分组进行组合。
CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
WITH ROLLUP:
select 姓名,课程,sum(分数)
from #temp
group by 姓名,课程
with rollup

select 姓名,课程,sum(分数)
from #temp
group by 课程,姓名
with rollup

ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
那么这个某一层次结构是什么呢?看一下上面的数据,当以姓名先分组时,分成了三组(不计最后一行合计),当以课程先分组时,分成了两组(不计最后一行合计)。
这个某一层次结构我猜想应该跟 group by 的分组顺序有关。
GROUPING:
grouping 与 with rollup 的结合(与with cube的结合是一样的)
select 姓名,课程,sum(分数),GROUPING(姓名)
from #temp
group by 姓名,课程
with rollup

当 grouping 指定列为【姓名】时,只有最后一行是 with rollup 所添加的。
select 姓名,课程,sum(分数),GROUPING(课程)
from #temp
group by 姓名,课程
with rollup

当 grouping 指定列为【课程】时,第三行、第六行、第九行和最后一行是 with rollup 所添加的。
当行由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 1;当行不由 CUBE 或 ROLLUP 运算符添加时,该函数将导致附加列的输出值为 0。
select 姓名,
case when GROUPING(姓名)=1
then '总计'
else
case when GROUPING(课程)=1
then '小计'
else 课程 end
end 课程,
sum(分数)
from #temp
group by 姓名,课程
with rollup

SQL Server WITH ROLLUP、WITH CUBE、GROUPING语句的应用的更多相关文章
- SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...
- SQL SERVER全面优化-------写出好语句是习惯
前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...
- SQL Server(三):Select语句
1.最基本的Select语句: Select [Top n [With Ties]] <*|Column_Name [As <Alias>][, ...n]> From & ...
- SQL Server 查询、搜索命令、语句
--查询所有表 SELECT NAME,* FROM SYSOBJECTS WHERE XTYPE='U' order by SYSOBJECTS.name --查询所有存储过程 select * f ...
- SQL Server 找出值得优化的语句
方法 1. sys.dm_exec_qurey_stats 返回 SQL Server 中缓存查询计划的聚合性能统计信息. 缓存计划中的每个查询语句在该视图中对应一行, 并且行的生存期与计划本身相关联 ...
- 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句
在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...
- 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程
一.回顾早期的SQL SERVER版本:早在SQL Server 2000时代,查询分析器的功能还很简陋,远不如VS那么强大.到SQL Server 2005时代,代码高亮.SQL优化等功能逐渐加强, ...
- 从零开始学习SQL SERVER(2)--- 基本操作及语句
声明:仅为本人随笔及经验之谈,有错误敬请指出. # 后的文字为注释 Microsoft SQL Server Management Studio 中的SQL命令 添加数据库 1 CREATE DATA ...
- sql server抓取表结构的语句
sql server 2008抓取方法: --------------------------------------- SELECT 表名 = Case When A.colorder ...
随机推荐
- mysql -- 一次执行多条sql语句
最近要做一个软件升级,其中涉及到数据库表字段的变动(新增或删除或修改),所有的关于数据库的变动的sql语句都是存放在Sqlupdate.sql文件中,每次升级的时候都需要执行一次Sqlupdate.s ...
- fzu 1330:Center of Gravity(计算几何,求扇形重心)
Problem 1330 Center of Gravity Accept: 443 Submit: 830Time Limit: 1000 mSec Memory Limit : 327 ...
- java.lang.ClassNotFoundException: org.codehaus.jackson.JsonProcessingException 异常解决方案
在SpringMVC中使用Jackson实现json输出时配置如下: <!-- 输出对象转JSON支持 --> <bean id="stringConverter" ...
- JBPM4 经常使用表结构及其说明
首先我想说.这不一篇原创博文. 这里设置成原创.主要是为了分享,由于它对于jbpm的刚開始学习的人,真的值得一看.原作者的博文地址并没有查到,我是在还有一位转载此文的博主那儿获得的.地址在这儿. 本文 ...
- keystore是个嘛东西
不管是QQ,还是微信,还是支付,涉及到第三方的都的用这个玩意,有时候找不对很坑的 首先我们要区分jks, app,keystore(新建keystoer的文件new就可以了)再进行下一步操作 Ecli ...
- java基础---->java中nio的使用(一)
JDK 1.4 中引入的新输入输出 (NIO) 库在标准 Java 代码中提供了高速的.面向块的 I/O.今天我们就简单的学习一下nio的知识.我笑,便面如春花,定是能感动人的,任他是谁. nio的简 ...
- 二 Android Studio 打包EgretApp (开机画面、横竖屏、调试、和原生交互)
测试环境: Windows7 Egret Engine 5.0.14 Egret support 5.0.12 Android Studio 2.3 目录: 一 修改开机画面 二 横竖屏设置 三 修改 ...
- Objective-C实用类和协议
Objective-C实用类和协议 目录 概述 NSObject 概述 NSObject 协议<NSObject> 类NSObject 详细方法参考文档 实用操作 是否为某个类或其子类 是 ...
- ERROR in [copy-webpack-plugin] unable to locate "D:/xxx/xxx/xxx"
vue打包的时候npm run build报错 ERROR in [copy-webpack-plugin] unable to locate "D:/xxx/xxx/xxx" 这 ...
- Vue基础-作用域插槽-列表组件
Vue 测试版本:Vue.js v2.5.13 Vue 官网介绍作用域插槽时, 在 2.5.0+,slot-scope 能被用在任意元素或组件中而不再局限于 <template>. 作用域 ...