说明:
针对4家不同类型的公司进行统计 其中餐饮类公司和食品类公司手动录入区域A小计 其余两家不需要
食品公司全部位于区域A内 餐饮公司位于区域A,B内(共A,B两个区域)
总计产生公式如下
餐饮公司=区域A小计+区域B店铺的销售额
食品公司=区域A小计
其余两家=所有店铺的销售额总和
表字段如下
unit(公司)    region(区域)   shop_Name(店铺名)   sales(今年销售额-万元)    last_Sales(去年销售额)
 餐饮公司           A                店铺A1                1                       1
 餐饮公司           A                店铺A2                2                       2
 餐饮公司           A                店铺A3                3                       3
 餐饮公司           B                区域A小计             50                      50
 餐饮公司           B                店铺A4                4                       4 食品公司           A                店铺B1                1                       1
 食品公司           A                店铺B21               1                       1
 食品公司           A                店铺B3                1                       1
 食品公司           B                区域A小计             80                      80 百货公司           A                店铺C                 2                       2
 百货公司           B                店铺C2                3                       3
 百货公司           B                店铺C4                4                       4 贸易公司           A                店铺H                 5                       1
 贸易公司           A                店铺F                 5                       2
 贸易公司           B                店铺H4                1                       3 希望得到结果如下
unit(公司)    region(区域)   shop_Name(店铺名)   sales(今年销售额-万元)    last_Sales(去年销售额)
 餐饮公司           A                店铺A1                1                       1
 餐饮公司           A                店铺A2                2                       2
 餐饮公司           A                店铺A3                3                       3
 餐饮公司           B                区域A小计             50                      50
 餐饮公司           B                店铺A4                4                       4
 餐饮公司           B                总计                  54                      54 食品公司           A                店铺B1                1                       1
 食品公司           A                店铺B21               1                       1
 食品公司           A                店铺B3                1                       1
 食品公司           B                区域A小计             80                      80
 食品公司           B                总计                  80                      80 百货公司           A                店铺C                 2                       2
 百货公司           B                店铺C2                3                       3
 百货公司           B                店铺C4                4                       4
 百货公司           B                总计                  9                       9 贸易公司           A                店铺H                 5                       1
 贸易公司           A                店铺F                 5                       2
 贸易公司           B                店铺H4                1                       3
 贸易公司           B                总计                  11                      6

解决方案 »

  1.   

    http://blog.csdn.net/ws_hgo/archive/2009/09/20/4572310.aspx
      

  2.   

    本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ws_hgo/archive/2009/09/20/4572310.aspx
    /*   
    现在我们要用with rollup实现分级汇总结果显示格式   
    可以先看下3实例分级汇总过滤,在查询的时候实现grouping(列名)   
    */   
      
    declare @T table   
    (   
      groups char(10),   
      Item varchar(10),   
      Color varchar(10),   
      Quantity int   
    )   
    insert into @T select 'aa','table','blue',124   
    union all select 'bb','table','red',-23   
    union all select 'bb','cup','green',-23   
    union all select 'aa','chair','blue',101   
    union all select 'aa','chair','red',-90   
    --select  groups,Item,color,sum(Quantity) Quantity,   
    --         grouping(groups) gp,   
    --        grouping(Item) Item,   
    --        grouping(Color) Color   
    --from @T group by groups,Item,Color with rollup    
      
    select case when grouping(groups)=1 then '总计' else groups end as 'groups',   
           isnull(case when grouping(groups)=0 and grouping(Item)=1 then N'小计'+groups else Item end,'') as 'Item',   
           isnull(case when grouping(groups)=0 and grouping(Color)=1 and grouping(Item)=0 then Item+N'小计' else Color end,'') as 'Color',   
    sum(Quantity) Quantity   
    from @T group by groups,Item,Color with rollup    
    /*   
    groups     Item         Color        Quantity   
    ---------- ------------ ------------ -----------   
    aa         chair        blue         101   
    aa         chair        red          -90   
    aa         chair        chair小计      11   
    aa         table        blue         124   
    aa         table        table小计      124   
    aa         小计aa                      135   
    bb         cup          green        -23   
    bb         cup          cup小计        -23   
    bb         table        red          -23   
    bb         table        table小计      -23   
    bb         小计bb                      -46   
    总计                                   89   
    */  
      

  3.   

    谢谢白云
    不过with rollup汇总一下子解决不了这个问题
      

  4.   

    各统计行的region字段为什么都是B,没有A的?
      

  5.   

    我记得with rollup是可以的
    好象还有一个功能跟with rollup类似的不太记得了!
      

  6.   

    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)select 
      case when grouping(a)=1 then '合计' else cast(a as varchar) end a, b, sum(c) as c,sum(d) as d,sum(e) as 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) as d,sum(e) as 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, b, 
      case when grouping(c)=1 and grouping(b)=0 then '小计' else cast(c as varchar) end c, 
      sum(d) as d,sum(e) as 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, sum(c) as c, sum(d) as d,sum(e) as e from #t 
    group by 
       a,b,c 
    with rollup 
       having grouping(a)=1 or grouping(b)=1 or grouping(c)=0drop table #t/*a                              b           c           d           e           
    ------------------------------ ----------- ----------- ----------- ----------- 
    1                              2           12          16          26
    1                              3           12          16          26
    2                              2           14          16          26
    2                              3           15          16          26
    合计                             NULL        53          64          104(所影响的行数为 5 行)a                              b           c           d           e           
    ------------------------------ ----------- ----------- ----------- ----------- 
    1                              2           3           16          26
    1                              3           3           16          26
    2                              2           2           4           5
    2                              2           3           4           6
    2                              2           4           4           7
    2                              2           5           4           8
    2                              3           3           12          21
    2                              3           6           4           5
    合计                             NULL        NULL        64          104(所影响的行数为 9 行)a                              b           c                              d           e           
    ------------------------------ ----------- ------------------------------ ----------- ----------- 
    1                              2           3                              16          26
    1                              2           小计                             16          26
    1                              3           3                              16          26
    1                              3           小计                             16          26
    2                              2           2                              4           5
    2                              2           3                              4           6
    2                              2           4                              4           7
    2                              2           5                              4           8
    2                              2           小计                             16          26
    2                              3           3                              12          21
    2                              3           6                              4           5
    2                              3           小计                             16          26
    合计                             NULL        NULL                           64          104(所影响的行数为 13 行)a                              b                              c           d           e           
    ------------------------------ ------------------------------ ----------- ----------- ----------- 
    1                              2                              12          16          26
    1                              3                              12          16          26
    1                              小计                             24          32          52
    2                              2                              2           4           5
    2                              2                              3           4           6
    2                              2                              4           4           7
    2                              2                              5           4           8
    2                              3                              9           12          21
    2                              3                              6           4           5
    2                              小计                             29          32          52
    合计                             NULL                           53          64          104(所影响的行数为 11 行)*/