declare @s1 varchar(1000)
declare @s2 varchar(1000)set @s1=''
set @s2=''
select @s1=@s1+','+char(ascii('A')+编号) from 成绩表 order by id
select @s2=@s2+','+成绩 from 成绩表 order by idset @s1=stuff(@s1,1,1,'')
set @s2=stuff(@s2,1,1,'')exec(@s1+' union all '+@s2)

解决方案 »

  1.   

    declare @sql varchar(1000)
    declare @count int
    set @sql=''
    select @count=count(*) from 成绩表 group by 成绩
    set @count=0
    select @count=@count+1,@sql=@sql+'A'+cast(@count as varchar)+' ='''+成绩+''', ' 
    from 成绩表
    group by 成绩
    select @sql=substring(@sql,1,len(@sql)-1)
    exec('select '+@sql+' ')執行結果:
    A1     A2      A3      A4
    语文   数学    政治    化学
    如果改成 A,B,C,D動態的列還不知道怎麼做:(
      

  2.   

    感觉很存储过程拼一个CREATE TABLE 的SQL语句可能可以~~~~
      

  3.   

    --示例--测试数据
    create table tb(编号 int,成绩 varchar(10))
    insert tb select 1,'语文'
    union all select 2,'数学'
    union all select 3,'政治'
    union all select 4,'化学'
    go--转换处理
    declare @s varchar(8000),@i int
    select @s='',@i=64
    select @i=@i+1
    ,@s=@s+',['+char(@i)+']='''+成绩+''''
    from tb
    set @s=stuff(@s,1,1,'')
    exec('select '+@s)
    go--删除测试
    drop table tb/*--测试结果A      B      C      D    
    ------ ------ ------ ---- 
    语文   数学   政治   化学
    --*/