表数据:
学生 语文 数学 ...
张三 30 80
李四 20 60
王五 60 90
希望效果:
学生 分数
张三 30
张三 80
李四 20
李四 60
王五 60
王五 90
Create table Students
(student NVARCHAR(20),
Chn NVARCHAR(4) ,Math NVARCHAR(4))
;
insert into Students
select '张三', 30 , 80
union all
select '李四', 20 , 60
union all
select '王五' , 60 , 90
;
select * from students;
/*
student Chn Math
张三 30 80
李四 20 60
王五 60 90
*/
SELECT student,成绩,科目
FROM Students
UNPIVOT(成绩 FOR 科目 IN (Chn,Math) ) p;
/*
student 成绩 科目
张三 30 Chn
张三 80 Math
李四 20 Chn
李四 60 Math
王五 60 Chn
王五 90 Math
*/
select student,成绩 from
(
SELECT student,成绩,科目
FROM Students
UNPIVOT(成绩 FOR 科目 IN (Chn,Math) ) p
)t
/*
student 成绩
张三 30
张三 80
李四 20
李四 60
王五 60
王五 90
*/
https://www.cnblogs.com/downmoon/archive/2012/04/05/2433571.html
select [学生],[语文] from [成绩表]
union all
select [学生],[数学] from [成绩表]
谢谢,这种有点麻烦,假如有很多列就需要写很多遍。