行列互换
Posted 中国风
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了行列互换相关的知识,希望对你有一定的参考价值。
--> --> (Roy)生成測試數據 if not object_id('Class') is null drop table Class Go Create table Class([Student] nvarchar(2),[数学] int,[物理] int,[英语] int,[语文] int) Insert Class select N'李四',77,85,65,65 union all select N'张三',87,90,82,78 go declare @s nvarchar(4000),@s2 nvarchar(4000),@s3 nvarchar(4000),@s4 nvarchar(4000) select @s=isnull(@s+',','declare ')+'@'+rtrim(Colid)+' nvarchar(4000)', @s2=isnull(@s2+',','select ')+'@'+rtrim(Colid)+'='''+case when @s2 is not null then 'union all select' else ' select ' end+' [科目]='''+quotename(Name,'''')+'''''', @s3=isnull(@s3,'')+'select @'+rtrim(Colid)+'=@'+rtrim(Colid)+'+'',''+quotename([Student])+''=''+quotename('+quotename(Name)+','''''''') from Class ', @s4=isnull(@s4+'+','')+'@'+rtrim(Colid) from syscolumns where id=object_id('Class') and Name not in('Student') --print @s+' '+@s2+' '+@s3+' exec('+@s4+')' 显示执行语句 exec(@s+' '+@s2+' '+@s3+' exec('+@s4+')') /* 科目 李四 张三 ---- ---- ---- 数学 77 87 物理 85 90 英语 65 82 语文 65 78 */
另类显示格式,把列数转为行数显示
if not object_id('Class') is null
drop table Class
Go
Create table Class([Student] nvarchar(2),[Course] nvarchar(2),[Score] int)
Insert Class
select N'张三',N'语文',78 union all
select N'张三',N'数学',87 union all
select N'张三',N'英语',82 union all
select N'张三',N'物理',90 union all
select N'李四',N'语文',65 union all
select N'李四',N'数学',77 union all
select N'李四',N'英语',65 union all
select N'李四',N'物理',85
GO
DECLARE @Sql NVARCHAR(max)
SET @Sql=(SELECT ',[Col'+RTRIM(ROW_NUMBER()OVER(ORDER BY RAND()))+']='''+[Student]+'''' FROM dbo.Class FOR XML PATH(''))
SET @Sql=STUFF(@Sql,1,1,'SELECT ')+STUFF((SELECT ',[Col1]='''+[Course]+'''' FROM dbo.Class FOR XML PATH('')),1,1,' UNION ALL SELECT ')
SET @Sql=@Sql+STUFF((SELECT ',[Col1]='''+RTRIM([Score])+'''' FROM dbo.Class FOR XML PATH('')),1,1,' UNION ALL SELECT ')
EXEC(@Sql)
/*
Col1 Col2 Col3 Col4 Col5 Col6 Col7 Col8
张三 张三 张三 张三 李四 李四 李四 李四
语文 数学 英语 物理 语文 数学 英语 物理
78 87 82 90 65 77 65 85
*/
其它方法
http://topic.csdn.net/u/20080614/17/22e73f33-f071-46dc-b9bf-321204b1656f.html?seed=562318242以上是关于行列互换的主要内容,如果未能解决你的问题,请参考以下文章
写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换