zoukankan      html  css  js  c++  java
  • SqlServerROLLUP

    在生成包含小记和合计的报表时,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,

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

    sum(score) '合计'

    from student

    group by sex,sclass with rollup

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

    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

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

  • 相关阅读:
    前端有关请求的相关内容axios
    有关浏览器异步请求数据的跨域问题
    Java环境的配置
    Css3中有关的 @media 媒体查询相关的知识
    Vue中实现异步加载的组件进行分割介绍
    Less的相关知识
    Vue框架中有关 computed的相关知识
    vue中如何在子组件添加类似于watch属性监听父组件数据,数据变化时子组件做出相应的动作
    JS的有关递归的知识点(数据无限级联的实现)
    JS中有关闭包的相关内容及介绍
  • 原文地址:https://www.cnblogs.com/oneword/p/1445201.html
Copyright © 2011-2022 走看看