T1:
姓名    性别    年龄       分类1    分类2   分类3   。。
。。结果是把查询的结果后增加合计SUM(分类1),SUM(分类2),SUM(分类3)。
注意,T1表中的分类是动态的,因为T1表是临时表,所以在取数据前,并不知道分类有多少个。

解决方案 »

  1.   

    http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?33238
      

  2.   

    ---参考:----------------------------------------------------------------
    -- Author  :fredrickhu(小F,向高手学习)
    -- Date    :2009-09-03 19:50:10
    -- Verstion:
    --      Microsoft SQL Server 2005 - 9.00.4035.00 (Intel X86) 
    -- Nov 24 2008 13:01:59 
    -- Copyright (c) 1988-2005 Microsoft Corporation
    -- Developer Edition on Windows NT 5.1 (Build 2600: Service Pack 3)
    --
    ----------------------------------------------------------------
    --> 测试数据:[tb]
    if object_id('[tb]') is not null drop table [tb]
    go 
    create table [tb]([姓名] varchar(4),[学期] int,[语文] int,[数学] int,[英语] int,[政治] int)
    insert [tb]
    select '张三',1,70,60,80,30 union all
    select '张三',2,80,90,75,40 union all
    select '张三',3,50,70,85,60 union all
    select '李四',1,66,80,90,55 union all
    select '李四',2,75,70,85,65
    --------------开始查询--------------------------
    select 
        case when grouping(姓名)=1 then '合计' else cast(姓名 as varchar) end 姓名, 
        case when grouping(学期)=1 and grouping(姓名)=0 then '小计' else cast(学期 as varchar) end 学期, 
        sum(语文) as 语文,sum(数学) as 数学,sum(英语) as 英语,sum(政治) as 政治
    from 
       tb 
    group by 
       姓名,学期 
    with rollup ------------------------------------------------------结果-------------------------------------------------------
    /*姓名                             学期                             语文          数学          英语          政治
    ------------------------------ ------------------------------ ----------- ----------- ----------- -----------
    李四                             1                              66          80          90          55
    李四                             2                              75          70          85          65
    李四                             小计                             141         150         175         120
    张三                             1                              70          60          80          30
    张三                             2                              80          90          75          40
    张三                             3                              50          70          85          60
    张三                             小计                             200         220         240         130
    合计                             NULL                           341         370         415         250(8 行受影响)
     */
      

  3.   

    小F给出正解了,顺便也来回顾一下,LZ不问快把这个问题给忘了,学习了