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 行受影響)