PIVOT函數與UNPIVOT函數的運用


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_list

 

--建張表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)

--原始表數據

select * from Table_A

name Math English Chinese
小A 80 90 88
小B 70 90 85
小C 75 95 85
小D 80 90 75

 

--UNPIVOT用於將列轉為行

select Subject,name,Grade from Table_A
unpivot(Grade for Subject in ([Math],[English],[Chinese])) as s

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函數用於將行轉為列

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 b

 

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.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM