declare @sql varchar(4000),@tmp varchar(4000)set @sql='select CASE WHEN (GROUPING(title1) = 1) THEN ''合计''
            ELSE title1 end as title1'
select @sql=@sql+','+[Title2]+'=isnull(sum(case  Title2 when '''+Title2+''' then Money  end),0)'
from T 
group by Title2
set @sql=@sql+',''合计''=sum(Money) from  T  group by [title1] with rollup'exec(@sql)title1     数学          英语          语文          合计          
---------- ----------- ----------- ----------- ----------- 
李四         90          78          80          248
王五         87          0           88          175
张山         67          0           100         167
赵六         0           0           92          92
合计         244         78          360         682

解决方案 »

  1.   

    --初始测试数据
    create table #cj (name char(8),subject char(8),result int)
    go
    insert #cj values('张三','语文',80)
    insert #cj values('张三','数学',90)
    insert #cj values('张三','物理',85)
    insert #cj values('李四','语文',85)
    insert #cj values('李四','数学',92)
    insert #cj values('李四','物理',82)
    go--查询语句
    declare @sql varchar(4000)
    set @sql = 'select Name as 姓名 '
    select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
     from (select distinct Subject from #CJ) as a
    select @sql = @sql+' from #cj group by name'
    exec(@sql)--删除测试数据
    drop table #cj--结果姓名       数学          物理          语文          
    -------- ----------- ----------- ----------- 
    李四       184         164         170
    张三       180         170         160