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)
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)
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動態的列還不知道怎麼做:(
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
------ ------ ------ ----
语文 数学 政治 化学
--*/