程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> SQL SERVER 2005+ 行列互轉函數 PIVOT和UNPIVOT

SQL SERVER 2005+ 行列互轉函數 PIVOT和UNPIVOT

編輯:關於SqlServer

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 行受影響)
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved