--示例数据
create table tb(month char(4),A decimal(10,1),B decimal(10,1),C decimal(10,1))
insert tb select '0501',2.5,3.8,6.2
union all select '0502',8.2,7.6,1.3
union all select '0503',3.4,5.3,3.8
go--查询处理
declare @s1 varchar(8000),@s2 varchar(8000)
,@s3 varchar(8000),@s4 varchar(8000),@s5 varchar(8000)
,@i varchar(10)
select @s1='',@s2='',@s3='',@s4='',@s5='',@i='0'
select @s1=@s1+',@'+@i+' varchar(8000)'
,@s2=@s2+',@'+@i+'=''month='''''+name+''''''''
,@s3=@s3+'
,@'+@i+'=@'+@i+'+'',[''+[month]+'']=''+cast(['+name+'] as varchar)'
,@s4=@s4+',@'+@i+'=''select ''+@'+@i
,@s5=@s5+'+'' union all ''+@'+@i
,@i=cast(@i as int)+1
from syscolumns 
where object_id('tb')=id and name<>'month'select @s1=stuff(@s1,1,1,'')
,@s2=stuff(@s2,1,1,'')
,@s3=stuff(@s3,1,4,'')
,@s4=stuff(@s4,1,1,'')
,@s5=stuff(@s5,1,15,'')exec('declare '+@s1+'
select '+@s2+'
select '+@s3+'
from tb
select '+@s4+'
exec('+@s5+')')
go--删除测试
drop table tb/*--测试结果month 0501 0502 0503 
----- ---- ---- ---- 
A     2.5  8.2  3.4
B     3.8  7.6  5.3
C     6.2  1.3  3.8(所影响的行数为 3 行)
--*/