拼吾爱程序人生

首页 » 数据库编程 » SQL Server » Sql Server2005 Transact-SQL 学习总结之-PIVOT和UNPIVOT运算符
cobra - 2008-9-1 8:04:00
1.简介
PIVOT通过将表达式某一列中的唯一值转换为输出中的多个列来旋转表值表达式,并在必要时对最终输出中所需的任何其余列值执行聚合。
UNPIVOT与PIVOT执行相反的操作,将表值表达式的列转换为列值。
通俗简单的说:PIVOT就是行转列,UNPIVOT就是列传行

2.例题

Code


--查询得如下结果
--注意:
--如果子组为空,SQL Server生成空值。如果聚合函数是COUNT,且子组为空,则返回零。
Year  Q1  Q2  Q3  Q4
2006  20  19    12  18
2007  10  10    NULL NULL
2008  8    7      15  9

其实PIVOT在sql2000中可以用SELECT...CASE语句来实现,下面是sql2000的代码:

Code


UNPIVOT将与PIVOT执行几乎完全相反的操作,将列转换为行。

Code


--查询得如下结果
ID  A    Value
1    A1  q1
1    A2  q2
1    A3  q3
2    A1  q1
2    A2  p1
2    A3  m1
3    A1  t1
3    A2  p1
3    A3  m1

Code


3.总结
个人感觉PIVOT运算符相比SELECT...CASE语句就是代码精简了一些,似乎PIVOT可读性好像不太好!至少我看起来PIVOT语法有点怪怪,也许是还习惯吧!我个人还是喜欢用SELECT...CASE语句.希望微软能提供PIVOT运算符的动态版本,这样动态生成列时,不用那么费事的累加字符串。



(文/aierong  出处/博客园)

 您可能对 [SQL Server] 的这些文章也感兴趣:

一次SQL Server 2000 安装奇遇
专家谈SQL Server 2005的CLR
Microsoft SQL Server 2005 概述
Sql Server2005 Transact-SQL 学习总结之-窗口函数(OVER)
SQL Server 7.0 入门(一)
使SQL Server数据支持 XML
SQL Server数据库的集群设计
PowerShell脚本支持已加入到SQL Server 2008
SQLServer identity列的操作方法
SQL Server日志清除两种方法
1
查看完整版本: Sql Server2005 Transact-SQL 学习总结之-PIVOT和UNPIVOT运算符
Modify by pin5i DZNT_ExpandPackage 2.1.3258 2007-2008 pin5i.com
  Total Unique Visitors: