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
*/