PIVOT用於將行轉爲列,完整語法以下:
TABLE_SOURCE
PIVOT(
聚合函數(value_column)
FOR pivot_column
IN(<column_list>)
)
UNPIVOT用於將列轉爲行,完整語法以下:
完整語法:
TABLE_SOURCE
UNPIVOT(
value_column
FOR pivot_column
IN(<column_list>)
)
以上語法能夠理解爲value_column字段與pivot_column字段的行列(列行)轉換,pivot_column字段顯示的列/行爲column_listhtml
--建張表Table_A函數
create table Table_A(name varchar(8),Math int,English int,Chinese int)
insert into Table_A values('小A',80,90,88)
insert into Table_A values('小B',70,90,85)
insert into Table_A values('小C',75,95,85)
insert into Table_A values('小D',80,90,75)post
--原始表數據spa
select * from Table_Ahtm
name | Math | English | Chinese |
小A | 80 | 90 | 88 |
小B | 70 | 90 | 85 |
小C | 75 | 95 | 85 |
小D | 80 | 90 | 75 |
--UNPIVOT用於將列轉爲行blog
select Subject,name,Grade from Table_A
unpivot(Grade for Subject in ([Math],[English],[Chinese])) as sci
Subject | name | Grade |
Math | 小A | 80 |
English | 小A | 90 |
Chinese | 小A | 88 |
Math | 小B | 70 |
English | 小B | 90 |
Chinese | 小B | 85 |
Math | 小C | 75 |
English | 小C | 95 |
Chinese | 小C | 85 |
Math | 小D | 80 |
English | 小D | 90 |
Chinese | 小D | 75 |
--PIVOT函數用於將行轉爲列get
select * from
(
select Subject,name,Grade from Table_A
unpivot(Grade for Subject in ([Math],[English],[Chinese])) as s
) as a
pivot(sum(Grade) for name in ([小A],[小B],[小C],[小D])) as bit
Subject | 小A | 小B | 小C | 小D |
Chinese | 88 | 85 | 85 | 75 |
English | 90 | 90 | 95 | 90 |
Math | 80 | 70 | 75 | 80 |
實現多行多列轉換,請參考:http://www.cnblogs.com/hbwy/p/4359209.htmltable