declare @s varchar(8000),@i int
select @s='',@i=0
select @i=@i+1
,@s=@s+case 
when @i=201 then ',其他=sum(case when 科目 in('''+科目+''''
when @i>201 then ','''+科目+''''
else ',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
end
from 表
group by 科目
if @i>200 set @s=@s+') then 成绩 else 0 end)'
exec('select 學號'+@s+' from 表 group by 學號')

解决方案 »

  1.   

    那么我還想問一下,因為
    declare @s varchar(8000)
    set @s=''
    select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
    from 表 group by 科目
    exec('select 學號'+@s+' from 表 group by 學號')
    得出結果:
    學號    語文     數學   英語   物理    歷史    政治     化學      体育  ......
      1      80       0      90     80     0        78       0        75   ......
       2     58       80     0      85     94        0       87        0   ......
    表的字段數目是未知,要將此數据插入到一個臨時表中,需要怎樣創建那個臨時表?
      

  2.   

    declare @s varchar(8000)
    set @s=''
    select @s=@s+',['+科目+']=sum(case 科目 when '''+科目+''' then 成绩 else 0 end)'
    from 表 group by 科目
    exec('select 學號'+@s+' into ##t from 表 group by 學號')
    select * from ##t
    drop table ##t