本帖最后由 hery2002 于 2009-12-22 10:00:33 编辑

解决方案 »

  1.   

    ---参考 只能做到这个地步.
    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)=1/*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 行)select 
      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 
    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 行)
    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 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 行)
    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 #ta                              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 行)*/
      

  2.   

    PS:提醒楼主,不要以标题来吸引网友的注意,谢谢.貌似CSDN不定期的会屏蔽一些标题党的..
      

  3.   

    在你前面一个帖子已经提到,使用SSAS建模,然后通过SSRS展示即可实现你要的功能,只是你不愿意动手去实践一下而已,相对来讲,如果你SSAS建模会的话,这个报表应该是很简单的,按照公司,部门和日期三个维度做建模,同时辅助以聚合函数,你的这个报表就出来了.如果非要使用SQL语句来实现,简单的方式就是UNION ALL,在前面的帖子都已经提到过的.或者说,使用前面提到的用其他开发工具来辅助设计也可以行之有效的方式之一.
    大家都给了你思路的.
      

  4.   

    弱弱的问下啊  刚照找了下 SSAS建模,   sql2000有这个玩意不 ,
    在这之前 我还不知道有SSAS建模这个概念呢!
      

  5.   

    第一,二行很乱。
    用前台报表工具+SQL实现是很简单的。