SqlServer-ROLLUP & COBE
SqlServer-ROLLUP
在生成包含小记和合计的报表时,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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- sql – 将SELECT行压缩成字符串的最佳方法是什么?
- DB2死锁超时Sqlstate:40001,原因代码68是由于使用SQL从ser
- sqlServer拼结列字符串
- linq-to-sql – 你能在Linq2Sql类上实现一个接口吗?
- mysql Event Scheduler: Failed to open table mysql.event
- SQLSERVER如何获取一个数据库中的所有表的名称、一个表中所
- 部分SQLSERVER数据类型
- mysql 5.7.12 winx64安装配置方法图文教程
- sql-server – 从SQL Server 2008查询结果中选择第n行,其中
- sql – 我们如何检查该表是否有索引?