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

SQL 表列转表行(高精尖问题)
源表:
姓名       语文     数学
-------------------------
杨波       90               89
李明       70               88
赵强       100             60

目标表:
姓名     学科       得分
------------------------
杨波     语文       90  
杨波     数学       89
李明     语文       70
李明     数学       88
赵强     语文       100
赵强     数学       60

要求:
用sql语句实现,如何搞?谢谢   。。。

------解决方案--------------------
Select
姓名,
'语文 ' As 学科,
语文 As 得分
From
TableName
Union
Select
姓名,
'数学 ' As 学科,
数学 As 得分
From
TableName
------解决方案--------------------
UNION, 2005可以PIVOT
------解决方案--------------------
2005实现方法
select *
from ta
unpivot
(数分 for [科目] in([语文],[数学])
)as tb
------解决方案--------------------
declare @t table(姓名 varchar(10),语文 int,数学 int)
insert into @t select '杨波 ',90,89
union all select '李明 ',70,88
union all select '赵强 ',100,60

SELECT 姓名,科目,成绩
FROM
(SELECT 姓名,语文,数学
FROM @t) p
UNPIVOT
(成绩 FOR 科目 IN
(语文,数学)
)AS unpvt
/*

杨波 语文 90
杨波 数学 89
李明 语文 70
李明 数学 88
赵强 语文 100
赵强 数学 60
*/