如何 作出最后的   小计 合计  比较麻烦忘 贴出代码参考参考 

解决方案 »

  1.   

    GROUP BY XX
    WITH ROLLUP
      

  2.   

    group by后面加with rollup就可以了。不过这个一般都在客户端用表格控件来完成的。
      

  3.   

    GROUP BY 列 WITH ROLLUP
      

  4.   

    ROLLUP 、CUBE
    查看联机丛书..
      

  5.   

    【最佳答案】Posted on 2007-11-12 21:52 一味 阅读(1031) 评论(2)  编辑 收藏 网摘 所属分类: SQLServer  
    首先创建测试表、添加数据。
    create 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,6,4,5)
    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即可。
    select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
    sum(b),sum(c),sum(d),sum(e) from #t group by a with rollup
    情况二:有多个分类汇总列,只需要一个合计.增加rollup之后,需要增加判断。
    select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
        b,
    sum(c),sum(d),sum(e) from #t 
    group by a,b with rollup 
    having grouping(b)=0 or grouping(a)=1select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
        b,
        c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    having grouping(c)=0 or grouping(a)=1
    情况三:有多个分类汇总列,需要全部的小计和合计。
    select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
        case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varchar) end b,
        case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    另外一种显示小计的方式
    select case when grouping(a)=1 then '合计' 
        when grouping(b)=1 then cast(a as varchar)+'小计'
        else cast(a as varchar) end a,
        case when grouping(b)=0 and grouping(c)=1 
        then cast(b as varchar)+'小计' else cast(b as varchar) end b,
        case when grouping(c)=1 and grouping(b)=0 
        then '' else cast(c as varchar) end c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    情况四:有多个分类汇总列,需要部分的小计和合计
    select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
        b,
        case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c,
    sum(d),sum(e) from #t 
    group by a,b,c with rollup 
    having grouping(a)=1 or grouping(b)=0
    select case when grouping(a)=1 then '合计' else cast(a as varchar) end a,
        case when grouping(b)=1 and grouping(a)=0 then '小计' else cast(b as varchar) end 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