SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)
--SQL Server2008 程序设计 汇总 GROUP BY ,WITH ROLLUP WITH CUBE GROUPING SET(..)
- /********************************************************************************
- *主题:SQL Server2008 程序设计 汇总 group by ,WITH ROLLUP WITH CUBE
- *说明:本文是个人学习的一些笔记和个人愚见
- * 有很多地方你可能觉得有异议,欢迎一起讨论
- *作者:Stephenzhou(阿蒙)
- *日期: 2012.12.5
- *Mail:szstephenzhou@163.com
- *另外:转载请著名出处。
- **********************************************************************************/
--SQL Server2008 程序设计 汇总 group by ,WITH ROLLUP WITH CUBE /********************************************************************************
*主题:SQL Server2008 程序设计 汇总 group by ,WITH ROLLUP WITH CUBE
*说明:本文是个人学习的一些笔记和个人愚见
* 有很多地方你可能觉得有异议,欢迎一起讨论 *作者:Stephenzhou(阿蒙)
*日期: 2012.12.5 *Mail:szstephenzhou@163.com
*另外:转载请著名出处。
**********************************************************************************/
以下是测试数据
- IF OBJECT_ID('Inventory') is not null
- drop table Inventory
- go
- create table Inventory(
- Store varchar(2),
- Item varchar(20),
- Color varchar(10),
- Quantity decimal
- )
- insert into Inventory values('NY','Table','Blue',124)
- insert into Inventory values('NJ','Table','Blue',100)
- insert into Inventory values('NY','Table','Red',29)
- insert into Inventory values('NJ','Table','Red',56)
- insert into Inventory values('PA','Table','Red',138)
- insert into Inventory values('NY','Table','Green',229)
- insert into Inventory values('PA','Table','Green',304)
- insert into Inventory values('NY','Chair','Blue',101)
- insert into Inventory values('NJ','Chair','Blue',22)
- insert into Inventory values('NY','Chair','Red',21)
- insert into Inventory values('NJ','Chair','Red',10)
- insert into Inventory values('PA','Chair','Red',136)
- insert into Inventory values('NJ','Sofa','Green',2)
IF OBJECT_ID('Inventory') is not null
drop table Inventory
go
create table Inventory(
Store varchar(2),
Item varchar(20),
Color varchar(10),
Quantity decimal
)
insert into Inventory values('NY','Table','Blue',124)
insert into Inventory values('NJ','Table','Blue',100)
insert into Inventory values('NY','Table','Red',29)
insert into Inventory values('NJ','Table','Red',56)
insert into Inventory values('PA','Table','Red',138)
insert into Inventory values('NY','Table','Green',229)
insert into Inventory values('PA','Table','Green',304)
insert into Inventory values('NY','Chair','Blue',101)
insert into Inventory values('NJ','Chair','Blue',22)
insert into Inventory values('NY','Chair','Red',21)
insert into Inventory values('NJ','Chair','Red',10)
insert into Inventory values('PA','Chair','Red',136)
insert into Inventory values('NJ','Sofa','Green',2)
--一般的group by
- select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
- from Inventory
- group by Item,Color
- order by Item,Color
- /*
- Item Color TotalQuantity Stores
- -------------------- ---------- --------------------------------------- -----------
- Chair Blue 123 2
- Chair Red 167 3
- Sofa Green 2 1
- Table Blue 224 2
- Table Green 533 2
- Table Red 223 3
- (6 行受影响)
- */
select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
from Inventory
group by Item,Color
order by Item,Color
/*
Item Color TotalQuantity Stores
-------------------- ---------- --------------------------------------- -----------
Chair Blue 123 2
Chair Red 167 3
Sofa Green 2 1
Table Blue 224 2
Table Green 533 2
Table Red 223 3 (6 行受影响)
*/
GROUP BY .. WITH ROLLUP
多了4个rollup行
- select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
- from Inventory
- group by Item,Color WITH ROLLUP --group by rollup(item,color)
- order by Item,Color
- /*
- Item Color TotalQuantity Stores
- -------------------- ---------- --------------------------------------- -----------
- NULL NULL 1272 13
- Chair NULL 290 5
- Chair Blue 123 2
- Chair Red 167 3
- Sofa NULL 2 1
- Sofa Green 2 1
- Table NULL 980 7
- Table Blue 224 2
- Table Green 533 2
- Table Red 223 3
- (10 行受影响)
- */
select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
from Inventory
group by Item,Color WITH ROLLUP --group by rollup(item,color)
order by Item,Color
/*
Item Color TotalQuantity Stores
-------------------- ---------- --------------------------------------- -----------
NULL NULL 1272 13
Chair NULL 290 5
Chair Blue 123 2
Chair Red 167 3
Sofa NULL 2 1
Sofa Green 2 1
Table NULL 980 7
Table Blue 224 2
Table Green 533 2
Table Red 223 3 (10 行受影响)
*/
WITH CUBE 多维数据集,多维数据集的纬度取决于分组列的数目
- select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
- from Inventory
- group by Item,Color WITH cube --group by cube(item,color)
- order by Item,Color
- /*
- Item Color TotalQuantity Stores
- -------------------- ---------- --------------------------------------- -----------
- NULL NULL 1272 13
- NULL Blue 347 4
- NULL Green 535 3
- NULL Red 390 6
- Chair NULL 290 5
- Chair Blue 123 2
- Chair Red 167 3
- Sofa NULL 2 1
- Sofa Green 2 1
- Table NULL 980 7
- Table Blue 224 2
- Table Green 533 2
- Table Red 223 3
- (13 行受影响)
- */
select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
from Inventory
group by Item,Color WITH cube --group by cube(item,color)
order by Item,Color /*
Item Color TotalQuantity Stores
-------------------- ---------- --------------------------------------- -----------
NULL NULL 1272 13
NULL Blue 347 4
NULL Green 535 3
NULL Red 390 6
Chair NULL 290 5
Chair Blue 123 2
Chair Red 167 3
Sofa NULL 2 1
Sofa Green 2 1
Table NULL 980 7
Table Blue 224 2
Table Green 533 2
Table Red 223 3 (13 行受影响) */
GROUPING SETS(..) 仅返回最高级别
- select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
- from Inventory
- group by GROUPING sets(Item,Color)
- order by Item,Color
- /*
- Item Color TotalQuantity Stores
- -------------------- ---------- --------------------------------------- -----------
- NULL Blue 347 4
- NULL Green 535 3
- NULL Red 390 6
- Chair NULL 290 5
- Sofa NULL 2 1
- Table NULL 980 7
- (6 行受影响)
- */
select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
from Inventory
group by GROUPING sets(Item,Color)
order by Item,Color /*
Item Color TotalQuantity Stores
-------------------- ---------- --------------------------------------- -----------
NULL Blue 347 4
NULL Green 535 3
NULL Red 390 6
Chair NULL 290 5
Sofa NULL 2 1
Table NULL 980 7 (6 行受影响)
*/
混合使用:
返回store最高级别和cube的两个item,color纬度所以级别组合
- select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
- from Inventory
- group by GROUPING sets(Store) ,cube(Item,color)
- order by Item,Color
- /*
- Item Color TotalQuantity Stores
- -------------------- ---------- --------------------------------------- -----------
- NULL NULL 190 5
- NULL NULL 504 5
- NULL NULL 578 3
- NULL Blue 225 2
- NULL Blue 122 2
- NULL Green 2 1
- NULL Green 229 1
- NULL Green 304 1
- NULL Red 274 2
- NULL Red 66 2
- NULL Red 50 2
- Chair NULL 32 2
- Chair NULL 122 2
- Chair NULL 136 1
- Chair Blue 101 1
- Chair Blue 22 1
- Chair Red 10 1
- Chair Red 21 1
- Chair Red 136 1
- Sofa NULL 2 1
- Sofa Green 2 1
- Table NULL 156 2
- Table NULL 382 3
- Table NULL 442 2
- Table Blue 100 1
- Table Blue 124 1
- Table Green 229 1
- Table Green 304 1
- Table Red 29 1
- Table Red 56 1
- Table Red 138 1
- (31 行受影响)
- */
select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
from Inventory
group by GROUPING sets(Store) ,cube(Item,color)
order by Item,Color /*
Item Color TotalQuantity Stores
-------------------- ---------- --------------------------------------- -----------
NULL NULL 190 5
NULL NULL 504 5
NULL NULL 578 3
NULL Blue 225 2
NULL Blue 122 2
NULL Green 2 1
NULL Green 229 1
NULL Green 304 1
NULL Red 274 2
NULL Red 66 2
NULL Red 50 2
Chair NULL 32 2
Chair NULL 122 2
Chair NULL 136 1
Chair Blue 101 1
Chair Blue 22 1
Chair Red 10 1
Chair Red 21 1
Chair Red 136 1
Sofa NULL 2 1
Sofa Green 2 1
Table NULL 156 2
Table NULL 382 3
Table NULL 442 2
Table Blue 100 1
Table Blue 124 1
Table Green 229 1
Table Green 304 1
Table Red 29 1
Table Red 56 1
Table Red 138 1 (31 行受影响)
*/
转载请著名出处。 *博客地址:http://blog.csdn.net/szstephenzhou
SQL Server2008 程序设计 汇总 GROUP BY,WITH ROLLUP,WITH CUBE,GROUPING SETS(..)的更多相关文章
- [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)
原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...
- 高级聚合函数rollup(),cube(),grouping sets()
rollup(),cube(),grouping sets() 上面这几个函数,是对group by分组功能做的功能扩展. a.rollup() 功能:在原结果基础上追加一行总合计记录 ...
- SQL 中GROUP BY 、ROLLUP、CUBE 关系和区别
转自:http://www.cnblogs.com/dyufei/archive/2009/11/12/2573974.html 不言自明,看SQL就完全理解了,不需要过多解释,不错,分享之: ROL ...
- GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例
oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...
- SQL Server2008宝典 全书代码
-- ============================================= -- Create database template -- ==================== ...
- Oracle中group by 的扩展函数rollup、cube、grouping sets
Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...
- 【转】rollup、cub、grouping sets、grouping、grouping_id在报表中的应用
摘自 http://blog.itpub.net/26977915/viewspace-734114/ 在报表语句中经常要使用各种分组汇总,rollup和cube就是常用的分组汇总方式. 第一:gro ...
- SQL Server 之 GROUP BY、GROUPING SETS、ROLLUP、CUBE
1.创建表 Staff CREATE TABLE [dbo].[Staff]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [Money] [int] NULL, [Cr ...
- 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录
64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...
随机推荐
- php学习日志(1)-php介绍
在学习Php之前,我们要搞懂php是什么.英文全称php: php hypertext preprocessor,即php超文本预处理器.php脚本在服务器上执行,故它是一种服务器编程语言. php文 ...
- CSS中Padding的用法
Padding的英文意思是填充,在CSS中则是设置内边距属性. padding不允许使用负值 1. 四个参数时: padding: 10px,20px,30px,40px; 上边距:10px 右边距: ...
- C Primer Plus(第五版)学习笔记-可变宏:...和__VA_ARGS__
一 .__VA_ARGS__ P454 所讲printf()这些输出函数的参数是可变的,在调试程序时,可能希望定义参数为可变的输出函数, 那么可变参数宏会是一个选择,例如: #define DEBUG ...
- Oracle表添加主键、外键
1.创建表的同时创建主键约束 (1)无命名 create table student ( studentid int primary key not null, studentname varchar ...
- MVC-Model数据注解(二)-自定义
由于系统的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解. 自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也 ...
- 如何使用Promise
在说Promise之前,不得不说一下JavaScript的嵌套的回调函数 在JavaScript语言中,无论是写浏览器端的各种事件处理回调.ajax回调,还是写Node.js上的业务逻辑,不得不面对的 ...
- python 统计单词个数
根据一篇英文文章统计其中单词出现最多的10个单词. # -*- coding: utf-8 -*-import urllib2import refrom collections import Coun ...
- 数据结构———重载与模板(C++)
相关信息 /* * * @subject 数据结构 * @author 信管1142班 201411671210 JJ lai * * @program 模板与重载 * */ 实验一: /* 要求如下 ...
- Hyper-V中安装CentOS分辨率修改
Hyper-V还是极好用的,不过对linux的支持优点问题, 比如默认情况,linux分辨率被锁定了,这里有一个比较简单的方法修改,针对CentOS grubby --update-kernel=AL ...
- char型字符串(数组)与string型字符串 指针与引用
一.常指针: int *const p; //指针不可改变,但是指针指向的数据可以改变. 指向常量的指针: const int *p; //指针可以改变,但是指针指向的数据不可以改变. 指 ...