微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SqlServer-ROLLUP & COBE

生成包含小记和合计的报表时,ROLLUP运算符很有用,ROLLUP运算符生成的结果集类似于CUBE运算符所生成的结果集.

ROLLUP和CUBE的区别在于:

1. cube生成的结果集显示了所选列的所有组合的聚合

2. rollup生成的结果集显示了所选列中值的某一个层次结构的聚合

示例:

sql:

With rollup:

select case when(grouping(sex)=1) then '合计' else sex end,

case when(grouping(sclass)=1) then '合计' else sclass end,

sum(score) '合计'

from student

group by sex,sclass with rollup

With cube

select case when(grouping(sex)=1) then '小记' else sex

end as 性别,

case when(grouping(sclass)=1) then '小记' else sclass

end as 班级,

sum(score)

from student

group by sex,sclass with cube

区别解释:

1. cube操作为所选的列的所有组合做了汇总,男/2,男/3,男/小记,女/2,女/3,女/小记,小记/小记,小记/2,小记/3

2. rollup操作并不针对多列中的所有可能进行汇总,而是以左边的列为主,列出右边的所有可能,然后汇总,不会针对右边的列,将左边列的所有汇总可能计算出来.

优点:

1. rollup返回单个结果集,而compute by返回多个结果集,多个结果集会增加代码的复杂性

2. rollup可以在服务器游标中使用,compute by不可以

3. rollup比compute by 执行起来更加高效

通过排序,可以实现系统想要的效果,

可以将小记汇总放在最上面,也可以将小记汇总放在各个分组之上.

例如:

select case when(grouping(sex)=1) then '合计' else sex end,sclass with rollup

order by grouping(sex) desc,grouping(sclass) desc,sex

select case when(grouping(sex)=1) then '合计' else sex end,sex,grouping(sclass) desc

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐