PIVOT用於將列值旋轉為列名(即行轉列),UNPIVOT 正好相反
MSDN:http://technet.microsoft.com/zh-cn/library/ms177410.ASPx
此函數2005以上版本才有的。
PIVOT的一般語法是:PIVOT(聚合函數(列) FOR 列 in (…) )AS P
完整語法:
table_source
PIVOT(
聚合函數(value_column)
FOR pivot_column (包含要成為列標題的值的列)
IN(<column_list>)
)
UNPIVOT用於將列明轉為列值(即列轉行),在SQL Server 2000可以用UNION來實現
完整語法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
PIVOT 函數:
01
SELECT * FROM(SELECT * FROM #TB PIVOT(MAX(分數) FOR 課程 IN (語文,數學,物理)) a) B
02
03
結果:
04
05
姓名 語文 數學 物理
06
---------- ----------- ----------- -----------
07
李四 74 84 94
08
張三 74 83 93
09
10
(2 行受影響)
UNPIVOT 函數:
01
--以上面的結果為例子 進行列轉行
02
SELECT * FROM(SELECT * FROM #TB PIVOT(MAX(分數) FOR 課程 IN (語文,數學,物理)) a) B UNPIVOT(分數 for 課程 in([語文],[數學],[物理])) c
03
04
結果:
05
06
姓名 分數 課程
07
---------- ----------- -------------------
08
李四 74 語文
09
李四 84 數學
10
李四 94 物理
11
張三 74 語文
12
張三 83 數學
13
張三 93 物理
14
15
(6 行受影響)
01
create table #tb(姓名 varchar(10),課程 varchar(10),分數 int)
02
03
insert into #tb values('張三','語文',74)
04
05
insert into #tb values('張三','數學',83)
06
07
insert into #tb values('張三','物理',93)
08
09
insert into #tb values('李四','語文',74)
10
11
insert into #tb values('李四','數學',84)
12
13
insert into #tb values('李四','物理',94)
14
15
SELECT * FROM #tb
16
17
結果:
18
姓名 課程 分數
19
---------- ---------- -----------
20
張三 語文 74
21
張三 數學 83
22
張三 物理 93
23
李四 語文 74
24
李四 數學 84
25
李四 物理 94
26
27
(6 行受影響)