drop table tb
go
create table tb(
Name varchar(10),
Course varchar(10),
Score int
)
go
insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)
go
select * from tb
go
--Old Way
select
Name,
MAX( case Course when '语文' then Score else 0 end) as 语文,
MAX( case Course when '数学' then Score else 0 end) as 数学,
MAX( case Course when '物理' then Score else 0 end) as 物理
from tb
group by Name
go
--PIVOT
select * from tb
pivot(
max(Score) for Course in([语文],[数学],[物理])
) pivotedTb
order by Name
go
--UNPIVOT
select * from
(
select * from tb
pivot(
max(Score) for Course in([语文],[数学],[物理])
) pivotedTb
) sourceTb
unpivot(
Score for Course in([语文],[数学],[物理])
) unPivotedTb
简单演示了一下SQL Server2005 中的一对很有用的操作:PIVOT ,UNPIVOT
代码如下:
drop table tb
go
create table tb(
Name varchar(10),
Course varchar(10),
Score int
)
go
insert into tb values('张三','语文',74)
insert into tb values('张三','数学',83)
insert into tb values('张三','物理',93)
insert into tb values('李四','语文',74)
insert into tb values('李四','数学',84)
insert into tb values('李四','物理',94)
go
select * from tb
go
--Old Wayselect
Name,
MAX( case Course when '语文' then Score else 0 end) as 语文,
MAX( case Course when '数学' then Score else 0 end) as 数学,
MAX( case Course when '物理' then Score else 0 end) as 物理
from tb
group by Name
go
--PIVOT
select * from tb
pivot(
max(Score) for Course in([语文],[数学],[物理])
) pivotedTb
order by Name
go
--UNPIVOT
select * from
(
select * from tb
pivot(
max(Score) for Course in([语文],[数学],[物理])
) pivotedTb
) sourceTb
unpivot(
Score for Course in([语文],[数学],[物理])
) unPivotedTb
go