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语句的应用的更多相关文章

  1. SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE

    1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...

  2. SQL SERVER全面优化-------写出好语句是习惯

    前几篇文章已经从整体提供了诊断数据库的各个方面问题的基本思路...也许对你很有用,也许你觉得离自己太远.那么今天我们从语句的一些优化写法及一些简单优化方法做一个介绍.这对于很多开发人员来说还是很有用的 ...

  3. SQL Server(三):Select语句

      1.最基本的Select语句: Select [Top n [With Ties]] <*|Column_Name [As <Alias>][, ...n]> From & ...

  4. SQL Server 查询、搜索命令、语句

    --查询所有表 SELECT NAME,* FROM SYSOBJECTS WHERE XTYPE='U' order by SYSOBJECTS.name --查询所有存储过程 select * f ...

  5. SQL Server 找出值得优化的语句

    方法 1. sys.dm_exec_qurey_stats 返回 SQL Server 中缓存查询计划的聚合性能统计信息. 缓存计划中的每个查询语句在该视图中对应一行, 并且行的生存期与计划本身相关联 ...

  6. 不同数据库oracle mysql SQL Server DB2 infomix sybase分页查询语句

    在不同数据库中的使用的分页查询语句: 当前页:currentpage 页大小:pagesize 1. Oracle数据库 select * from (select A.*,rownum rn fro ...

  7. 如何在SQL Server 2008下轻松调试T-SQL语句和存储过程

    一.回顾早期的SQL SERVER版本:早在SQL Server 2000时代,查询分析器的功能还很简陋,远不如VS那么强大.到SQL Server 2005时代,代码高亮.SQL优化等功能逐渐加强, ...

  8. 从零开始学习SQL SERVER(2)--- 基本操作及语句

    声明:仅为本人随笔及经验之谈,有错误敬请指出. # 后的文字为注释 Microsoft SQL Server Management Studio 中的SQL命令 添加数据库 1 CREATE DATA ...

  9. sql server抓取表结构的语句

    sql server 2008抓取方法: ---------------------------------------   SELECT      表名 = Case When A.colorder ...

随机推荐

  1. mac zsh选择到行首的快捷键

    Mac OS X 下zsh切换窗口的快捷键:Shift-Command-←. 移动到当前命令行的行首,使用快捷键[Ctrl][A].移动到当前命令行的行尾,使用快捷键[Ctrl[E].

  2. django头像上传详解

    使用form组件上传头像 实现的效果如下: 将默认的上传文件框隐藏起来变成了一个默认的头像 而且可以点击上传 处理步骤 avatar = forms.FileField( widget = widge ...

  3. Python 正则表达式分组

    被括号括起来的表达式将作为一个整体,也就是一个分组: In [43]: str = "Jan 26 16:41:27 localhost dhclient[1480]: bound to 1 ...

  4. 修改UE4的deriveddatacache目录位置,扩大C盘空间

    按照默认安装目录,UE4会装在C盘 C:\Program Files\Epic Games\UE_4.15 DerivedDataCache缓存目录在 C:\Users\你的用户名\AppData\L ...

  5. 四个dos命令检查你的电脑是否中木马

    一些基本的命令往往可以在保护网络安全上起到很大的作用,下面几条命令的作用就非常突出. 命令是再CMD中输入,不是运行框中 一.检测网络连接 如果你怀疑自己的计算机上被别人安装了木马,或者是中了病毒,但 ...

  6. Zabbix-3.0.3实现微信(WeChat)告警

    导读 Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用zabbix结合微信作为主要的告警方式,这样可以及时有效的把告警信息推送到接收人,方便告 ...

  7. 【集中工作薄】 当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中

    功能:当前文件夹中所有Excel文件中 多个工作簿的第一个工作表 复制到工作簿中 Sub Books2Sheets() '定义对话框变量 Dim fd As FileDialog Set fd = A ...

  8. c#基础 第六讲

    烧开水 先询问:“是否要烧开水(Y/N)” 是的话执行--0°--100°(30°---水温了,50°---水热了,80°---水快开了,100°---水已经开了, 结束.) 判断 循环 选择 跳转 ...

  9. nginx排错error while loading shared libraries:libpcre.so.1:cannot open shared object file:No such file or directory

    启动nginx报错:error while loading shared libraries:libpcre.so.1:cannot open shared object file:No such f ...

  10. Python resources

    我想很多程序员应该记得 GitHub 上有一个 Awesome - XXX 系列的资源整理.awesome-python 是 vinta 发起维护的 Python 资源列表,内容包括:Web框架.网络 ...