原数据(部门确定,就这三个部门)
姓名  部门   完成零件1    完成零件2
A     001    100          200
B     001    200          100
C     002    100          100
D     003    200          200
要求得出如下数据
姓名  部门   完成零件1    完成零件2
A     001    100          200
B     001    200          100
C     002    100          100
D     003    200          200
部门001完成  null 300          300
部门002完成  null 100          100
部门002完成  null 200          200简单的说就是后面加三行汇总,我想过后面的汇总值每一个值都用一个子查询,除了这种方法,还有什么好方法(因为零件实际上有8种类型,等于要做24个子查询,而且我的原数据不是数据表本身就有的,而是经过查询得出来的)。数据库是2005,是否有新技术解决该问题。

解决方案 »

  1.   


    --> 测试数据: #t
    if object_id('tempdb.dbo.#t') is not null drop table #t
    go
    create table #t (姓名 varchar(1),部门 varchar(3),完成零件1 int,完成零件2 int)
    insert into #t
    select 'A','001',100,200 union all
    select 'B','001',200,100 union all
    select 'C','002',100,100 union all
    select 'D','003',200,200select * 
    from #t
    union all
    select '部门'+部门+'完成', 部门,sum(完成零件1),sum(完成零件1)
    from #t
    group by 部门 with rollup姓名          部门   完成零件1       完成零件2       
    ----------- ---- ----------- ----------- 
    A           001  100         200
    B           001  200         100
    C           002  100         100
    D           003  200         200
    部门001完成     001  300         300
    部门002完成     002  100         100
    部门003完成     003  200         200
    NULL        NULL 600         600(所影响的行数为 8 行)??
      

  2.   

    grouping  
    group by
    with rollup 
      

  3.   

    DECLARE @a table(xm varchar(20),bm varchar(20),lj1 INT,lj2 INT)
    INSERT @a SELECT 'A',    '001',    100  ,        200 
    union all select 'B',    '001',    200 ,         100 
    union all select 'C',    '002',    100 ,         100 
    union all select 'D',    '003',    200 ,         200 SELECT isnull(xm,'部门'+bm+'完成') xm,bm=case when xm is null then null else bm end,lj1,lj2 from(
    SELECT xm,bm,sum(lj1) lj1,sum(lj2) lj2
    FROM @a
    GROUP BY xm,bm
    WITH CUBE
    ) aa WHERE bm IS NOT  NULL 
     
     --result
     /*
    xm                   bm                   lj1         lj2         
    -------------------- -------------------- ----------- ----------- 
    A                    001                  100         200
    B                    001                  200         100
    C                    002                  100         100
    D                    003                  200         200
    部门001完成              NULL                 300         300
    部门002完成              NULL                 100         100
    部门003完成              NULL                 200         200(所影响的行数为 7 行)*/