zoukankan      html  css  js  c++  java
  • sql中 with rollup 、with cube、grouping 统计函数用法

    with rollup 、with cube、grouping
    CUBE 和 ROLLUP 之间的区别在于:
    CUBE 生成的结果集显示了所选列中值的所有组合的聚合。
    ROLLUP 生成的结果集显示了所选列中值的某一层次结构的聚合。
    grouping:
    当用 CUBE 或 ROLLUP 运算符添加行时,附加的列输出值为1,当所添加的行不是由 CUBE 或 ROLLUP 产生时,附加列值为0。

    --------------------------------------------------------------------------------

    首先创建测试表、添加数据。
    table #t(a int,b int,c int,d int,e int)
    insert into #t values(1,2,3,4,5)
    insert into #t values(1,2,3,4,6)
    insert into #t values(1,2,3,4,7)
    insert into #t values(1,2,3,4,8)
    insert into #t values(1,3,3,4,5)
    insert into #t values(1,3,3,4,6)
    insert into #t values(1,3,3,4,8)
    insert into #t values(1,3,3,4,7)

    insert into #t values(2,2,2,4,5)
    insert into #t values(2,2,3,4,6)
    insert into #t values(2,2,4,4,7)
    insert into #t values(2,2,5,4,8)  
      insert into #t values(2,3,3,4,6)
      insert into #t values(2,3,3,4,8)
      insert into #t values(2,3,3,4,7)
    
    
    情况一:只有一个分类汇总列时,只需要一个合计。只需要增加with rollup即可。
    case when grouping(a)=1 then '合计' else cast(a as varcharend a,
    sum(b),sum(c),sum(d),sum(e) from #t group by a with rollup
    
    
    
    情况二:有多个分类汇总列,只需要一个合计.增加rollup之后,需要增加判断。
    case when grouping(a)=1 then '合计' else cast(a as varcharend a,
        b,
    sum(c),sum(d),sum(e) from #t 
    group by a,b with rollup 
    having grouping(b)=0 or grouping(a)=1
    
    
    case when grouping(a)=1 then '合计' else cast(a as varcharend a,
        b,
        c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    having grouping(c)=0 or grouping(a)=1
    
    
    
    情况三:有多个分类汇总列,需要全部的小计和合计
    case when grouping(a)=1 then '合计' else cast(a as varcharend a,
        case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varcharend b,
        case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varcharend c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    
    
    
    另外一种显示小计的方式
    case when grouping(a)=1 then '合计' 
        when grouping(b)=1 then cast(a as varchar)+'小计'
        else cast(a as varcharend a,
        case when grouping(b)=0 and grouping(c)=1 
        then cast(b as varchar)+'小计' else cast(b as varcharend b,
        case when grouping(c)=1 and grouping(b)=0 
        then '' else cast(c as varcharend c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    
    
    
    情况四:有多个分类汇总列,需要部分的小计和合计
    case when grouping(a)=1 then '合计' else cast(a as varcharend a,
        b,
        case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varcharend c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    having grouping(a)=1 or grouping(b)=0
    
    
    
    case when grouping(a)=1 then '合计' else cast(a as varcharend a,
        case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varcharend b,
        c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    having grouping(a)=1 or grouping(b)=1 or grouping(c)=0

    引用:http://www.cnblogs.com/yiway/archive/2007/11/12/957281.html


    
    
  • 相关阅读:
    【流处理】Kafka Stream-Spark Streaming-Storm流式计算框架比较选型
    【大数据】大数据处理-Lambda架构-Kappa架构
    【ElasticSearch】ES5新特性-keyword-text类型-查询区别
    【大数据】大数据-实时统计分析-方案选型
    【Spark】SparkStreaming-流处理-规则动态更新-解决方案
    【ElasticSearch】ElasticSearch-SQL插件
    【ElasticSearch】ElasticSearch-索引优化-自定义索引
    【算法】如何设计--高效的大数据匹配算法
    【Java】Springboot-Quartz-分布式任务调度
    网页提示[Not allowed to load local resource: file://XXXX]错误
  • 原文地址:https://www.cnblogs.com/xiaonanmu/p/3853396.html
Copyright © 2011-2022 走看看