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 ...
随机推荐
- ECshop网点程序优化-自动生成类目页Keywords、Desciption Meta
ECshop支持针对每个新建的类目自定义Keywords.Description Meta信息,好处就不用说了,帮助SEO或者让浏览者了解这是什么页面,但如果有几百个类目的时候,人工去写这些类目又有点 ...
- VB6-表格控件MSHFlexGrid 实用代码
在vb6中要显示数据虽然有datagrid.msflexgrid.mshflexgrid.vsflexgrid.True dbgrid7.0 可选,不过我在工作中用的最多的还是MSHFlexGrid, ...
- Python prettytable的使用方法
Python prettytable的使用方法 prettytable可以整齐地输出一个表格信息: +-----------+------+------------+----------------- ...
- [Linux发行版] 常见Linux系统下载
本专题页汇总最受欢迎的Linux发行版基本介绍和下载地址,如果您是一位刚接触Linux的新手,这里的介绍可能对您有所帮助,如果您是以为Linux使用前辈,也可以在评论处留下您宝贵意见和经验,以便让更多 ...
- 用JAVA实现数字水印(可见)
数字水印有可见不可见之分,可见的比如课件上印有学校校徽,微博发图片会水印上上传者的信息及微博logo等. 用java实现可见的数字水印,草人主要是用到了java.awt包中的AlphaComposit ...
- SGU481 Hero of Our Time
Description Saratov ACM ICPC teams have a tradition to come together on Halloween and recollect terr ...
- zepto源码学习-06 touch
先上菜,看这个模块的最后一段代码,一看就明白. ['swipe', 'swipeLeft', 'swipeRight', 'swipeUp', 'swipeDown', 'doubleTap', 't ...
- android 小米手机连接到电脑adb无法识别 解决方案
下载并安装小米手机助手 它会自动帮你安装驱动程序 安装成功后重启一下adb服务 应该就可以了
- php or die用法
当前面的函数运行出错时,终止并输入提示.常见的用法如:mysql_connect('locahost','root','') or die('数据库连接失败');
- [Gauss]POJ1681 Painter's Problem
和POJ1222(分析)完全相同 题意也类似, 可以涂自己以及上下左右五个位置的颜色 问几次能全部涂色 不能输出inf 01方程组 用异或来求解就好了 ][]; // 增广矩阵 ]; // 解 ]; ...