SQL系列ROLLUP关键字

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


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

1.ROLLUP简单应用

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP
查询结果如下:

如果用ROLLUP的另一个关键字CUBE产生的结果如下:

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


引出一个概念:
维:查询所指定的列称为维,列的个数称为维度
以上两个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
结果:
 
引入ROLLUP可以方便的对查询结果排序或自定义附加列的格式
排序应用:

SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP ORDER BY GROUPING(Groups),Groups DESC
结果:

补充:关于汉字、字母、null、空值、数字的排序问题

SELECT * FROM @t ORDER BY groups DESC
结果:

至于自定义附加列的样式在第三步讲解

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
结果:
 

转载于:https://www.cnblogs.com/chenxumi/archive/2010/04/07/1706196.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值