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
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
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