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

  • 相关阅读:
    237. Delete Node in a Linked List
    430. Flatten a Multilevel Doubly Linked List
    707. Design Linked List
    83. Remove Duplicates from Sorted List
    160. Intersection of Two Linked Lists
    426. Convert Binary Search Tree to Sorted Doubly Linked List
    142. Linked List Cycle II
    类之间的关系
    初始化块
    明确类和对象
  • 原文地址:https://www.cnblogs.com/oneword/p/1445201.html
Copyright © 2011-2022 走看看