`
jinghuainfo
  • 浏览: 1526088 次
  • 性别: Icon_minigender_2
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

SQL SERVER的分类汇总

 
阅读更多

SQL SERVER的分类汇总



SQL SERVER中使用GROUP BY对数据进行分类汇总,我们也可以使用WITH ROLLUP和WITH CUBE配合GROUP BY进行“增强”了的分类汇总,那么他们两个是如何增强GROUP BY的汇总能力的呢?
一.功能增强
1.使用WITH ROLLUP
用下面的例子说明,GROUP使用了3个分组字段:GROUP BY A, B, C WITH ROLLUP就相当于

GROUP BY A, B, C UNION ALL
GROUP BY A, B UNION ALL
GROUP BY A UNION ALL
GROUP BY NULL

2.使用WITH CUBE
用下面的例子说明,GROUP使用了3个分组字段:GROUP BY A, B, C WITH CUBE就相当于

GROUP BY A, B, C UNION ALL
GROUP BY A, B UNION ALL
GROUP BY A, C UNION ALL
GROUP BY B, C UNION ALL
GROUP BY A UNION ALL
GROUP BY B UNION ALL
GROUP BY C UNION ALL
GROUP BY NULL

二.说明:
1.WITH ROLLUP和CUBE可以使用HAVING和GROUPING对产生的汇总行进行再次过滤。
2.GROUP BY A, B, C WITH ROLLUP/CUBE会将生成的汇总排序号,而GROUP BY/UNION ALL 却没有,只有手工ORDER BY排序了。
3.GROUP BY的字段数若不是上例的3个,其规律与上面一致。

三.举例:
DECLARE @T TABLE (大类 CHAR, 小类 CHAR, VAL INT)

INSERT INTO @T
SELECT 'A', 'B', 1 UNION ALL
SELECT 'A', 'B', 2 UNION ALL
SELECT 'A', 'C', 3 UNION ALL
SELECT 'A', 'C', 4 UNION ALL
SELECT 'D', 'B', 5 UNION ALL
SELECT 'D', 'B', 6 UNION ALL
SELECT 'D', 'C', 7 UNION ALL
SELECT 'D', 'C', 8

--使用WITH ROLLUP汇总
SELECT 大类, 小类, SUM(VAL)
FROM @T
GROUP BY 大类, 小类 WITH ROLLUP
/*
大类 小类
---- ---- -----------
A B 3
A C 7
A NULL 10
D B 11
D C 15
D NULL 26
NULL NULL 36
*/

--WITH ROLLUP 相当于下面的UNION ALL
SELECT 大类, 小类, SUM(VAL)
FROM @T
GROUP BY 大类, 小类
UNION ALL
SELECT 大类, NULL, SUM(VAL)
FROM @T
GROUP BY 大类
UNION ALL
SELECT NULL, NULL, SUM(VAL)
FROM @T
/*
大类 小类
---- ---- -----------
A B 3
D B 11
A C 7
D C 15
A NULL 10
D NULL 26
NULL NULL 36
*/

--使用WITH CUBE汇总
SELECT 大类, 小类, SUM(VAL)
FROM @T
GROUP BY 大类, 小类 WITH CUBE
/*

大类 小类
---- ---- -----------
A B 3
A C 7
A NULL 10
D B 11
D C 15
D NULL 26
NULL NULL 36
NULL B 14
NULL C 22
*/

--WITH CUBE 相当于下面的UNION ALL
SELECT 大类, 小类, SUM(VAL)
FROM @T
GROUP BY 大类, 小类
UNION ALL
SELECT 大类, NULL, SUM(VAL)
FROM @T
GROUP BY 大类
UNION ALL
SELECT NULL, 小类, SUM(VAL)
FROM @T
GROUP BY 小类
UNION ALL
SELECT NULL, NULL, SUM(VAL)
FROM @T
/*
大类 小类
---- ---- -----------
A B 3
D B 11
A C 7
D C 15
A NULL 10
D NULL 26
NULL B 14
NULL C 22
NULL NULL 36
*/

分享到:
评论

相关推荐

    如何在sqlserver中进行分类汇总-附件sql server 2005实例数据库和脚本

    小编对工作中遇到的用数据库语句进行分类汇总的查询信息的信息。压缩包中附件相关的数据库和 sql脚本。 详细的思路过程见博客:https://blog.csdn.net/aiming66/article/details/80717802

    SQL Server 存储层级数据实现无限级分类,左右值分类

    SQL Server 存储层级数据实现无限级分类,非递归存储过程无限级分类,左右值分类

    SQL Server数据汇总五招轻松搞定

    有些时候你想让SQL Server 返回一个聚集结果集合,而不是一个详细的结果集。SQL Server的GROUPBY子句,为你提供了一种聚合SQL Server数据的方式。GROUPBY子句允许你在一列或多列数据甚至是表达式上进行分组操作,在...

    sql经典精华语句汇总 很牛的一个汇总

    sql经典精华语句汇总 很牛的一个汇总 sql经典精华语句汇总 很牛的一个汇总

    Sqlserver2000经典脚本

    介绍就不多说了,下边是部分目录,觉得有用的话就顶一个 C:. │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整...

    SQL SERVER 2000开发与管理应用实例

    本书全面系统地介绍了SQL Server开发和管理的应用技术,涉及安装和配置SQL Server、日期处理、字符处理、排序规则、编号处理、数据统计与汇总、分页处理、树形数据处理、数据导入与导出、作业、数据备份与还原、用户...

    SQL Server 无限极查询,查询地区例子

    SQL Server中,对于多级分类查询某一级下面所有数据,无限极查询。 代码精简实用。保护建表和插入数据。

    SQL知识点汇总【完整版】

    全面详细的SQL基础知识 1.SQL语言分类 2.SQL SERVER 2008 数据分类 3.用户定义的数据类型 4.常规标识符 5.分隔标识符 6.…… 内容详细,就不多加描述,对于初学者绝对是很有帮助

    sqlserver2000基础(高手也有用)

    9.4.2 实现客户端其他OLE DB数据源与SQL Server之间的数据交换 289 9.4.3 在客户端实现SQL Server数据导入与导出处理的一些说明 289 9.5 在数据库中存取文件 290 9.5.1 SQL Server中的文件存取方法 290 ...

    经典SQL脚本大全

    │ sqlserver2000.txt │ ├─第01章 │ 1.9.1 设置内存选项.sql │ 1.9.2(2) 使用文件及文件组.sql │ 1.9.2(3) 调整tempdb数据库的文件属性.sql │ ├─第02章 │ │ 2.1 日期概念理解中的一些测试.sql │ │ ...

    21天学会SQL

    1.3.2 SQL语言的分类 19 1.4 绘制E-R图设计数据库 20 1.4.1 绘制E-R图的基本要素 20 1.4.2 E-R图绘制实例 22 1.5 小结 24 1.6 习题 24 第2章 数据库的安装 ( 教学视频:26分钟) 26 2.1 SQL Server 2008版本介绍 26...

    《ASP.NET+SQL组建动态网站》随书光盘

    2.4.2 SQL语言分类 2.4.3 SELECT语句 2.4.4 数据更改 2.4.5 汇总函数 2.5 使用企业管理器创建和管理表 2.5.1 创建表 2.5.2 约束 2.5.3 规则 2.5.4 默认值 2.5.5 修改表 2.5.6 删除表 2.6 与SQL Server数据库连接 2.7...

    SQL21日自学通

    报表与分类汇总449 BREAK ON449 COMPUTE450 在SQL*PLUS 中使用变量453 DEFINE 454 ACCEPT 455 NEW_VALUE457 DUAL 表458 DECODE 函数459 日期转换462 运行一系列的SQL 文件465 在你的SQL 脚本中加入注释466 高级报表...

    探讨SQL compute by的使用分析

    当与BY一起使用时,COMPUTE 子句在结果集内生成控制中断和分类汇总。 下列 SELECT 语句使用简单 COMPUTE 子句生成 titles 表中 price 及 advance 的求和总计: 代码如下:USE pubsSELECT type, price, advanceFROM ...

    sql中 order by 和 group by的区别

     使用group by 的目的就是要将数据分类汇总。 一般如: select 单位名称,count(职工id),sum(职工工资) form [某表] group by 单位名称 这样的运行结果就是以“单位名称”为分类标志统计各单位的职工人数

    SQL必知必会(第3版)--详细书签版

    所属分类: 计算机 > 数据库 > SQL语言 编辑推荐  SQL经典畅销书  涵盖所有主流数据库  学习与参考皆宜... 内容简介  sql 是目前使用最为广泛的数据库语言之一。本书没有涉及理论,而是从实践出发,...

    OA办公系统开源 VS2005+sql2005

    开发工具:Visual Studio .NET 2005 + Server2005 项目描述:OA办公系统基于B/S架构设计。 包括文件管理、共享下载、消息管理、公文流传、通知管理、内部论坛、人力资源管理、资产管理 等。 文件管理:接收文件 传送...

    计算机精品学习资料大放送

    最新JavaScript、Ajax典藏级学习资料下载分类汇总 网络最强PHP开发工具+电子书+视频教程等资料下载汇总 UML学习电子资下载汇总 软件设计与开发人员必备 经典LinuxCBT视频教程系列 Linux快速学习视频教程一帖通 ...

    图书馆信息管理系统-数据库课程设计VB-SQL.docx

    本文运用Visual Basic 6.0和SQL Server 2005软件,进行图书馆管理系统的课程设计。首先对系统进行需求分析,根据系统功能设计E-R模型,再进行逻辑结构设计实现E-R图向关系模型的转换,并优化数据模型,使其拥有一般...

    专业OA办公系统源码 开发工具:Visual Studio .NET 2005 + Server2005

    开发工具:Visual Studio .NET 2005 + Server2005 项目描述:OA办公系统基于B/S架构设计。 包括文件管理、共享下载、消息管理、公文流传、通知管理、内部论坛、人力资源管理、资产管理 等。 文件管理:接收文件 传送...

Global site tag (gtag.js) - Google Analytics