PIVOT是新引入SQL Server 2005的运算符,它让你能够将行级数据旋转成为列表数据,而不需要像先前版本的SQL Server一样使用CASE语句。
如何编写SQL Server 2005 PIVOT查询
PIVOT是新引入SQL Server 2005的运算符,它让你能够将行级数据旋转成为列表数据,而不需要像先前版本的SQL Server一样使用CASE语句。 X8]@nj,5
w#:Kpv<[B_
CASE语句查询 aP{s=|z[ll
'<L _Cp-9
对于数据库开发人员来说,将行级数据转换为列级数据并不是什么新东西。在SQL Server以前的版本里,要获得所需要的跨表格数据集就要用到一系列CASE语句和聚合查询。虽然这种方式让开发人员具有了对所返回数据进行高度控制的能力,但是编写出这些查询是一件很麻烦的事情。 NBPa%ln
!> ,KcB-
为了看一下这些CASE语句是如何使用的。我们需要一些测试数据。运行列表A里的脚本能够创建一个SalesHistory表格并把数据加载到表格里。 >! m@>!
x-G'b-$%U
现在我可以编写一个基于CASE语句的PIVOT查询。这个查询的目标是按照年份将每件产品的销售状况集中起来,这些产品包括:BigScreen、PoolTable和Computer。每件产品自己的销售数据都放在专用的列里。列表B里是CASE语句查询的脚本。 m3>"_#6\
_B&NZZa
这个查询虽然很简单,相对容易编写,但是很繁复。你必须明确地为每个想要转换成列表数据的行输入一个CASE语句,这一点意思都没有。如果有个程序能够帮你自动完成这项任务就好了——这就是PIVOT运算符的作用之所在。 Wg(t>\}3
{wzP@(}
PIVOT l|b :l`B,V
(8/sqg=
由于SQL Server 2005有了新的PIVOT运算符,就不再需要CASE语句和GROUP BY语句了。(每个PIVOT查询都涉及某种类型的聚合,因此你可以忽略GROUP BY语句。)PIVOT运算符让我们能够利用CASE语句查询实现相同的功能,但是你可以用更少的代码就实现,而且看起来更漂亮。列表C是一个示例PIVOT查询,它模仿的是我们的CASE语句查询。 V|>u|.hbQ