日期:2014-05-18  浏览次数:20651 次

行转列,请问如何实现,在线等结帖!!!
姓名   语文   数学   物理
张三   73  83  93
李四   74  84  94
。。。。。。
行数不固定
--------------------------
转换成下列形式
科目   张三   李四     。。。
语文   73       74
数学   83       84
物理   93       94
或者去掉第一列也行

------解决方案--------------------
建议搜索一下“行专列”
------解决方案--------------------
Create Table TEST
(姓名 Nvarchar(10),
语文 Int,
数学 Int,
物理 Int)
Insert TEST Select N '张三 ', 73,83,93
Union All Select N '李四 ', 74,84,94
GO
Declare @S1 Nvarchar(4000), @S2 Nvarchar(4000), @S3 Nvarchar(4000)
Select @S1=N 'Select N ' '语文 ' ' As 科目 ', @S2 = N ' Union All Select N ' '数学 ' ' As 科目 ', @S3 = N ' Union All Select N ' '物理 ' ' As 科目 '
Select @S1 = @S1 + N ', SUM(Case 姓名 When N ' ' '+ 姓名 + N ' ' ' Then 语文 Else 0 End) As ' + 姓名,
@S2 = @S2 + N ', SUM(Case 姓名 When N ' ' '+ 姓名 + N ' ' ' Then 数学 Else 0 End) As ' + 姓名,
@S3 = @S3 + N ', SUM(Case 姓名 When N ' ' '+ 姓名 + N ' ' ' Then 物理 Else 0 End) As ' + 姓名
From TEST
Select @S1 = @S1 + ' From TEST ', @S2 = @S2 + ' From TEST ', @S3 = @S3 + ' From TEST '
--Select @S1 + @S2 + @S3
EXEC(@S1 + @S2 + @S3)
GO
Drop Table TEST
--Result
/*
科目 张三 李四
语文 73 74
数学 83 84
物理 93 94
*/