create table students (
name varchar(25),
class varchar(25),
grade int
)
insert into students values ('张三','语文',20)
insert into students values ('张三','数学',90)
insert into students values ('张三','英语',50)
insert into students values ('李四','语文',81)
insert into students values ('李四','数学',60)
insert into students values ('李四','英语',90)
select * from students
pivot(
max(grade)
FOR [class] IN ([语文],[数学],[英语])
) AS pvt
/*
李四 81 60 90
张三 20 90 50
*/
notes: from envykok
请保证 除了‘grade‘ 和 'class' 其他的列将唯一,如果其他列不唯一则无法实现此效果
例如:
create table students (
id int identity,
name varchar(25),
class varchar(25),
grade int
)
insert into students values ('张三','语文',20)
insert into students values ('张三','数学',90)
insert into students values ('张三','英语',50)
insert into students values ('李四','语文',81)
insert into students values ('李四','数学',60)
insert into students values ('李四','英语',90)
select * from students
pivot(
max(grade)
FOR [class] IN ([语文],[数学],[英语])
) AS pvt
id name 语文 数学 英语
----------- ------------------------- ----------- ----------- -----------
1 张三 20 20 20
2 张三 90 90 90
3 张三 50 50 50
4 李四 81 81 81
5 李四 60 60 60
6 李四 90 90 90
--=========================================================================
create table students (
name varchar(25),
语文 int,
数学 int,
英语 int
)
GO
INSERT INTO students values ('李四',81,60,90)
INSERT INTO students values ('张三',20,90,50)
select *
from
students
unpivot
(
grade
for class in
([语文],[数学],[英语])
) AS upvt
/*
李四 81 语文
李四 60 数学
李四 90 英语
张三 20 语文
张三 90 数学
张三 50 英语
*/