--行列转换示例1
–测试数据
create table 表(类别 varchar(10),男性 decimal(20,1),女性 decimal(20,1))
insert 表 select \’小说\’,38.0,59.2
union all select \’散文\’,18.9,30.6
union all select \’哲学\’,16.2,10.2
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+\’=\’\’性别=\’\’\’\’\’+name+\’\’\’\’\’\’\’\’
,@s3=@s3+\’
,@\’+@i+\’=@\’+@i+\’+\’\’,[\’\’+[类别]+\’\’]=\’\’+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(\’表\’)=id and name<>\’类别\’
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 表
select \’+@s4+\’
exec(\’+@s5+\’)\’)
go
–删除测试
drop table 表
/*–测试结果
性别 小说 散文 哲学
—- —– —– —–
男性 38.0 18.9 16.2
女性 59.2 30.6 10.2
(所影响的行数为 2 行)
–*/