time 
设为首页】【收藏本站
当前位置: 主页 > 数据库 > SQL Server > SQL 基础 > SQL系列ROLLUP关键字

SQL系列ROLLUP关键字

时间:2010-04-11 00:21 点击:1785次 字体:[ ]




为什么要引入ROLLUP?
可方便的生成"合计"、"小计"、"总计" 等混合统计的报表
如下数据集A经过ROLLUP运算可生成数据集B
SQL系列ROLLUP关键字_www.fengfly.com

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

1.ROLLUP简单应用

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color  WITH ROLLUP
查询结果如下:
SQL系列ROLLUP关键字_www.fengfly.com
如果用ROLLUP的另一个关键字CUBE产生的结果如下:

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color  WITH CUBE

结果:

SQL系列ROLLUP关键字_www.fengfly.com
引出一个概念:
维:查询所指定的列称为维,列的个数称为维度
以上两个SQL语句涉及三个维度,ROLLUP和CUBE都可以用于多维计算,不同点在于CUBE可以包含所有纬度的组合,而
ROLLUP只涉及指定列的维度计算。

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

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关键字_www.fengfly.com 
引入ROLLUP可以方便的对查询结果排序或自定义附加列的格式
排序应用:

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP ORDER BY GROUPING(Groups),Groups DESC
结果:
SQL系列ROLLUP关键字_www.fengfly.com
补充:关于汉字、字母、null、空值、数字的排序问题

SELECT * FROM @t ORDER BY groups DESC
结果:
SQL系列ROLLUP关键字_www.fengfly.com
至于自定义附加列的样式在第三步讲解

3.ROLLUP综合运用

SELECT Groups=CASE
  WHEN GROUPING(Color)=0 THEN Groups
  WHEN GROUPING(Groups)=1 THEN '总计'
  ELSE '' END,
 Item=CASE
  WHEN GROUPING(Color)=0 THEN Item
  WHEN GROUPING(Item)=1 THEN Groups+' 合计'
  ELSE '' END,
 Color=CASE
  WHEN GROUPING(Color)=0 THEN Color
  WHEN GROUPING(Color)=1 THEN Item+' 小计'
  ELSE '' END,
 Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
ORDER BY GROUPING(Groups),
CASE WHEN GROUPING(Groups)=0 THEN Groups END  DESC,
GROUPING(Item),
CASE WHEN GROUPING(Item)=0 THEN Item END  DESC,
GROUPING(Color),
CASE WHEN GROUPING(Color)=0 THEN Color END  DESC

结果:
SQL系列ROLLUP关键字_www.fengfly.com 


本文地址 : http://www.fengfly.com/plus/view-173147-1.html
标签: SQL 关键字 ROLLUP
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码: