MS_SQL SERVER 行列互换 通用版

新建测试表并插入相应数据

create table ttt ( 文理科 varchar(10), 全部人数 varchar(10), 最高分 varchar(10), 最低分 varchar(10), 平均分 varchar(10) ) insert ttt select '文科','18','12','3','6.7' union all select '理科','42','17','3','9.7' union all select '全部','60','17','3','8.7' go

行列互换存储过程

--DROP PROC p_zj create proc p_zj @tbname sysname, --要处理的表名 @fdname sysname, --做为转换的列名 @new_fdname sysname='' --为转换后的列指定列名 as 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+'='''+case isnull(@new_fdname,'') when '' then '' else @new_fdname+'=' end+''''''+name+'''''''' ,@s3=@s3+' select @'+@i+'=@'+@i+'+'',[''+cast(['+@fdname+'] as varchar)+'']=''''''+replace(['+name+'],'''','''''''')+'''''''' from ['+@tbname+']' ,@s4=@s4+',@'+@i+'=''select ''+@'+@i ,@s5=@s5+'+'' union all ''+@'+@i ,@i=cast(@i as int)+1 from syscolumns where object_id(@tbname)=id and name<>@fdname order by colid select @s1=substring(@s1,2,8000) ,@s2=substring(@s2,2,8000) ,@s4=substring(@s4,2,8000) ,@s5=substring(@s5,16,8000) exec('declare '+@s1+' select '+@s2+@s3+' select '+@s4+' exec('+@s5+')') go --//

调用存储过程

EXEC p_zj 'ttt','文理科','指标'

不会用的可以加我qq:449129942

保定-吴磊(保定银河卡电子有限公司)

你可能感兴趣的:(sql,server,object,测试,table,存储,insert)