注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

北漂的小羊

Java编程,开发者,程序员,软件开发,编程,代码。新浪微博号:IT国子监

 
 
 

日志

 
 
关于我

在这里是面向程序员的高品质IT技术学习社区,是程序员学习成长的地方。让我们更好地用技术改变世界。请关注新浪微博号: IT国子监(http://weibo.com/itguozijian)

网易考拉推荐

sql小计汇总 rollup用法实例分析  

2012-10-29 19:12:42|  分类: SQL Server |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

为什么要引入ROLLUP?
可方便的生成"合计"、"小计"、"总计" 等混合统计的报表
如下数据集A经过ROLLUP运算可生成数据集B

sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
 

接下来用上图中的A表做各种测试:

1.ROLLUP简单应用

Sql代码 
  1. SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color  WITH ROLLUP  
查询结果如下:
sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
 
如果用ROLLUP的另一个关键字CUBE产生的结果如下:

Sql代码 
  1. SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color  WITH CUBE  
结果:

sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
 
引出一个概念:
维:查询所指定的列称为维,列的个数称为维度
以上两个SQL语句涉及三个维度,ROLLUP和CUBE都可以用于多维计算,不同点在于CUBE可以包含所有纬度的组合,而
ROLLUP只涉及指定列的维度计算。

2.ROLLUP运算关键字GROUPING
GROUPING:判断是否为多维计算中的附加列,如果是则输出1,否则输出0 

Sql代码 
  1. SELECT Groups= CASE  WHEN GROUPING(GROUPS)=1 THEN 1 ELSE 0 END ,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP  
结果:
sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
  
引入ROLLUP可以方便的对查询结果排序或自定义附加列的格式 
排序应用:
Sql代码 
  1. SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP ORDER BY GROUPING(Groups),Groups DESC  
结果:
sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
 
补充:关于汉字、字母、null、空值、数字的排序问题

Sql代码 
  1. SELECT * FROM @t ORDER BY groups DESC  
结果:

 sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
 
至于自定义附加列的样式在第三步讲解 

3.ROLLUP综合运用

Sql代码 
  1. SELECT Groups=CASE   
  2.   WHEN GROUPING(Color)=0 THEN Groups  
  3.   WHEN GROUPING(Groups)=1 THEN '总计'  
  4.   ELSE '' END,  
  5.  Item=CASE   
  6.   WHEN GROUPING(Color)=0 THEN Item  
  7.   WHEN GROUPING(Item)=1 THEN Groups+' 合计'  
  8.   ELSE '' END,  
  9.  Color=CASE   
  10.   WHEN GROUPING(Color)=0 THEN Color  
  11.   WHEN GROUPING(Color)=1 THEN Item+' 小计'  
  12.   ELSE '' END,  
  13.  Quantity=SUM(Quantity)  
  14. FROM @t  
  15. GROUP BY Groups,Item,Color WITH ROLLUP  
  16. ORDER BY GROUPING(Groups),  
  17. CASE WHEN GROUPING(Groups)=0 THEN Groups END  DESC,  
  18. GROUPING(Item),  
  19. CASE WHEN GROUPING(Item)=0 THEN Item END  DESC,  
  20. GROUPING(Color),  
  21. CASE WHEN GROUPING(Color)=0 THEN Color END  DESC  
 
结果:
sql小计汇总 rollup用法实例分析 - 天涯草 - 天涯草
  

  评论这张
 
阅读(286)| 评论(1)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016