--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
*另外:转载请著名出处。
**********************************************************************************/

以下是测试数据

  1. IF OBJECT_ID('Inventory') is not null
  2. drop table Inventory
  3. go
  4. create table Inventory(
  5. Store varchar(2),
  6. Item varchar(20),
  7. Color varchar(10),
  8. Quantity decimal
  9. )
  10. insert into Inventory values('NY','Table','Blue',124)
  11. insert into Inventory values('NJ','Table','Blue',100)
  12. insert into Inventory values('NY','Table','Red',29)
  13. insert into Inventory values('NJ','Table','Red',56)
  14. insert into Inventory values('PA','Table','Red',138)
  15. insert into Inventory values('NY','Table','Green',229)
  16. insert into Inventory values('PA','Table','Green',304)
  17. insert into Inventory values('NY','Chair','Blue',101)
  18. insert into Inventory values('NJ','Chair','Blue',22)
  19. insert into Inventory values('NY','Chair','Red',21)
  20. insert into Inventory values('NJ','Chair','Red',10)
  21. insert into Inventory values('PA','Chair','Red',136)
  22. 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

  1. select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
  2. from Inventory
  3. group by  Item,Color
  4. order by Item,Color
  5. /*
  6. Item                 Color      TotalQuantity                           Stores
  7. -------------------- ---------- --------------------------------------- -----------
  8. Chair                Blue       123                                     2
  9. Chair                Red        167                                     3
  10. Sofa                 Green      2                                       1
  11. Table                Blue       224                                     2
  12. Table                Green      533                                     2
  13. Table                Red        223                                     3
  14. (6 行受影响)
  15. */
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行

  1. select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
  2. from Inventory
  3. group by  Item,Color WITH ROLLUP --group by rollup(item,color)
  4. order by Item,Color
  5. /*
  6. Item                 Color      TotalQuantity                           Stores
  7. -------------------- ---------- --------------------------------------- -----------
  8. NULL                 NULL       1272                                    13
  9. Chair                NULL       290                                     5
  10. Chair                Blue       123                                     2
  11. Chair                Red        167                                     3
  12. Sofa                 NULL       2                                       1
  13. Sofa                 Green      2                                       1
  14. Table                NULL       980                                     7
  15. Table                Blue       224                                     2
  16. Table                Green      533                                     2
  17. Table                Red        223                                     3
  18. (10 行受影响)
  19. */
 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 多维数据集,多维数据集的纬度取决于分组列的数目

  1. select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
  2. from Inventory
  3. group by  Item,Color WITH cube --group by cube(item,color)
  4. order by Item,Color
  5. /*
  6. Item                 Color      TotalQuantity                           Stores
  7. -------------------- ---------- --------------------------------------- -----------
  8. NULL                 NULL       1272                                    13
  9. NULL                 Blue       347                                     4
  10. NULL                 Green      535                                     3
  11. NULL                 Red        390                                     6
  12. Chair                NULL       290                                     5
  13. Chair                Blue       123                                     2
  14. Chair                Red        167                                     3
  15. Sofa                 NULL       2                                       1
  16. Sofa                 Green      2                                       1
  17. Table                NULL       980                                     7
  18. Table                Blue       224                                     2
  19. Table                Green      533                                     2
  20. Table                Red        223                                     3
  21. (13 行受影响)
  22. */
 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(..) 仅返回最高级别

  1. select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
  2. from Inventory
  3. group by GROUPING sets(Item,Color)
  4. order by Item,Color
  5. /*
  6. Item                 Color      TotalQuantity                           Stores
  7. -------------------- ---------- --------------------------------------- -----------
  8. NULL                 Blue       347                                     4
  9. NULL                 Green      535                                     3
  10. NULL                 Red        390                                     6
  11. Chair                NULL       290                                     5
  12. Sofa                 NULL       2                                       1
  13. Table                NULL       980                                     7
  14. (6 行受影响)
  15. */
 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纬度所以级别组合

  1. select Item,Color,SUM(Quantity) as TotalQuantity,COUNT(Store) as Stores
  2. from Inventory
  3. group by GROUPING sets(Store) ,cube(Item,color)
  4. order by Item,Color
  5. /*
  6. Item                 Color      TotalQuantity                           Stores
  7. -------------------- ---------- --------------------------------------- -----------
  8. NULL                 NULL       190                                     5
  9. NULL                 NULL       504                                     5
  10. NULL                 NULL       578                                     3
  11. NULL                 Blue       225                                     2
  12. NULL                 Blue       122                                     2
  13. NULL                 Green      2                                       1
  14. NULL                 Green      229                                     1
  15. NULL                 Green      304                                     1
  16. NULL                 Red        274                                     2
  17. NULL                 Red        66                                      2
  18. NULL                 Red        50                                      2
  19. Chair                NULL       32                                      2
  20. Chair                NULL       122                                     2
  21. Chair                NULL       136                                     1
  22. Chair                Blue       101                                     1
  23. Chair                Blue       22                                      1
  24. Chair                Red        10                                      1
  25. Chair                Red        21                                      1
  26. Chair                Red        136                                     1
  27. Sofa                 NULL       2                                       1
  28. Sofa                 Green      2                                       1
  29. Table                NULL       156                                     2
  30. Table                NULL       382                                     3
  31. Table                NULL       442                                     2
  32. Table                Blue       100                                     1
  33. Table                Blue       124                                     1
  34. Table                Green      229                                     1
  35. Table                Green      304                                     1
  36. Table                Red        29                                      1
  37. Table                Red        56                                      1
  38. Table                Red        138                                     1
  39. (31 行受影响)
  40. */

  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(..)的更多相关文章

  1. [转]详解Oracle高级分组函数(ROLLUP, CUBE, GROUPING SETS)

    原文地址:http://blog.csdn.net/u014558001/article/details/42387929 本文主要讲解 ROLLUP, CUBE, GROUPING SETS的主要用 ...

  2. 高级聚合函数rollup(),cube(),grouping sets()

       rollup(),cube(),grouping sets()   上面这几个函数,是对group by分组功能做的功能扩展. a.rollup()   功能:在原结果基础上追加一行总合计记录 ...

  3. SQL 中GROUP BY 、ROLLUP、CUBE 关系和区别

    转自:http://www.cnblogs.com/dyufei/archive/2009/11/12/2573974.html 不言自明,看SQL就完全理解了,不需要过多解释,不错,分享之: ROL ...

  4. GROUP BY中ROLLUP/CUBE/GROUPING/GROUPING SETS使用示例

    oracle group by中rollup和cube的区别: Oracle的GROUP BY语句除了最基本的语法外,还支持ROLLUP和CUBE语句.CUBE ROLLUP 是用于统计数据的. 实验 ...

  5. SQL Server2008宝典 全书代码

    -- ============================================= -- Create database template -- ==================== ...

  6. Oracle中group by 的扩展函数rollup、cube、grouping sets

    Oracle的group by除了基本使用方法以外,还有3种扩展使用方法,各自是rollup.cube.grouping sets.分别介绍例如以下: 1.rollup 对数据库表emp.如果当中两个 ...

  7. 【转】rollup、cub、grouping sets、grouping、grouping_id在报表中的应用

    摘自 http://blog.itpub.net/26977915/viewspace-734114/ 在报表语句中经常要使用各种分组汇总,rollup和cube就是常用的分组汇总方式. 第一:gro ...

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

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

  9. 64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录

    64位 SQL Server2008链接访问Oracle 过程汇总解决方法记录 经过几天不停的网上找资料,实验,终于联通了. 环境:系统:win 2008 ,SqlServer2008 R2, 连接O ...

随机推荐

  1. [Linux]root默认密码问题

    Linux/Ubuntu root默认密码问题   Ubuntu安装后root是没有默认的密码的,因为你还没给root设置密码,你第一个 user 是在 admin 组,他可以给 root 设置密码, ...

  2. Linux启用MySQL的InnoDB引擎

    前几天公司的一个项目组的同事反应说公司内部的一台Linux服务器上的MySQL没有InnoDB这个引擎,我当时想应该不可能啊,MySQL默认应该 就已经安装了这个引擎的吧,于是上服务器去看了看,发现还 ...

  3. js实现完美身份证号有效性验证

    最近需要对身份证合法性进行验证,实名验证是不指望了,不过原来的验证规则太过简单,只是简单的验证了身份证长度,现在业务需要加强下身份证验证规则,网上找到了不少资料,不过都不合偶的心意,无奈只好直接写一个 ...

  4. java创建多线程(转载)

    转载自:Java创建线程的两个方法 Java提供了线程类Thread来创建多线程的程序.其实,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象.每个Thread对 ...

  5. 我的第一个BAE python应用

    第一步 用baidu帐号登陆开发者中心 http://developer.baidu.com/ Baidu的引导,帮助说明已经很详细, 这里不重复. 第二步,创建新版本 用svn  check out ...

  6. appfabric 简单应用

    http://msdn.microsoft.com/en-us/library/ee790941(v=azure.10).aspx Preparing the Visual Studio Projec ...

  7. 17款code review工具

    本文是码农网原创翻译,转载请看清文末的转载要求,谢谢合作! 好的代码审查器可以大大地帮助程序员提高代码质量,减少错误几率. 虽然现在市场上有许多可用的代码审查工具,但如何挑选也是一个艰巨的任务.在咨询 ...

  8. Oracle11g用户密码过期

    今天一早来了,发现部署的网站访问报500,看日志,显示数据库连不上.然后我用sqldeveloper登录同样登不上,于是想到了之前碰到过的一个问题,Oralce11g的新特性:密码180天自动过期.随 ...

  9. 周末“干活”之 Mesos Meetup

    周末两天都是大雾霾天,作为运营也不能在家宅,告别了技术就得腿儿勤点儿. 非常感谢 Linker 的 Sam Chen 和 数人科技 的 CTO 共同组织的Mesos Meetup,OneAPM 最帅的 ...

  10. ASP.NET Application,Session,Cookie和ViewState等对象用法和区别 (转)

    在ASP.NET中,有很多种保存信息的内置对象,如:Application,Session,Cookie,ViewState和Cache等.下面分别介绍它们的用法和区别. 方法 信息量大小 作用域和保 ...