行列互换

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

以上是关于行列互换的主要内容,如果未能解决你的问题,请参考以下文章

实例043 Java将二维数组的行列互换

R语言数据集行列互换技巧

写一个函数,使给定的一个3*3的二维整型数组转置,即行列互换

写一个函数,使给定的一个3X3的二维整型数组转置,即行列互换。

sql行列互换

SQL 实现行列互换