日期:2014-05-16  浏览次数:20490 次

使用 PIVOT 和 UNPIVOT

PIVOT 提供的语法比一系列复杂的 SELECT...CASE 语句中所指定的语法更简单和更具可读性。有关 PIVOT 语法的完整说明,请参阅 FROM (Transact-SQL)

以下是带批注的 PIVOT 语法。

SELECT <非透视的列>,

[第一个透视的列] AS <列名称>,

[第二个透视的列] AS <列名称>,

...

[最后一个透视的列] AS <列名称>,

FROM

(<生成数据的 SELECT 查询>)

AS <源查询的别名>

PIVOT

(

<聚合函数>(<要聚合的列>)

FOR

[<包含要成为列标题的值的列>]

IN ( [第一个透视的列], [第二个透视的列],

... [最后一个透视的列])

) AS <透视表的别名>

<可选的 ORDER BY 子句>;

?

?

?

?

参考资料:

http://technet.microsoft.com/zh-cn/library/ms177410.aspx

?

?

create table tb(Name varchar(10),Class varchar(10),Scoure int)

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


select * from tb
pivot ( Max(Scoure) for Class in ([语文],[数学],[物理]) ) a

?

?

转换后运行结果:

Name 语文 数学 物理
------ ----------- ----------- -----------
李四 74 84 94
张三 74 83 93

?

?

?

?

?

?

?

?