数据如下:
CL1  CL2   CL3
A     T1    2
C     T2    2
A     T2    3
B     T1    5
C     T1    4
A     T1    3
C     T1    5
A     T1    3
要求按CL1,CL2分组统计相同CL1下不同CL2的结果,并且每当统计完后吧结果付在后面。
想得到的结果如下
CL1   CL2    CL3
A     T1      2
A     T1      3
A     T1      3
总计: (A)T1   8
A     T2      3
总计: (A)T2   3
B     T1      5
总计: (B)T1   5
C     T1      4
C     T1      5
总计: (C)T1   9
C     T2      2
总计: (C)T2   2请教各位高手算法怎样实现,要求用存储过程做。

解决方案 »

  1.   

    group by A,C1 with rollup
      

  2.   

    group by CL1,CL2
    with rollup
      

  3.   

    ----创建表
    Create table T(id int IDENTITY(1,1),CL1 varchar(10), CL2 varchar(10), CL3 int); 
    ---存储过程
    IF OBJECT_ID ( 'proc', 'P' ) IS NOT NULL 
        DROP PROCEDURE proc; 
    CREATE PROCEDURE proc 
    AS 
    begin
     ------变量定义
     declare @cl1 varchar(10),@cl2 varchar(10),@cl3 varchar(10),@clFlag varchar(10);
     -----游标定义
     declare cur Cursor For
     select 'detail' as 区分,table.CL1,table.CL2,table.cl3
     from table
     union
     select 'sum'as 区分,CL1,CL2,sum(CL3)as SUM  
     from table
     group by CL1,CL2
     order by CL1,CL2
    ----打开游标
    open cur;
    ----遍历游标
    fetch next cur into @clFlag,@cl1,@cl2,@cl3;  
    while @@fetch_status=0
    begin
      if @clFlag<>'sum'
      begin
        insert into T(CL1, CL2,CL3)
        select @cl1,@cl2,@cl3
      end
      else
      begin
        insert into T(CL1, CL2,CL3)
        select '总计:','('+@cl1+')'+@cl2,@cl3
      end
      fetch next cur into @clFlag,@cl1,@cl2,@cl3;
    end 
    ------取出结果
    select * from T
    order by ID 
    ---------关闭游标,释放游标
    close cur;
    deallocate cur;
    end