精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

如何用Pivot實現行列轉換

數據庫 Oracle
在Oracle中,如果要實現行列轉換,較為常見的是用DECODE和CASE語句。對于簡單的行列轉行,DECODE和CASE語句尚能應付。在邏輯比較復雜,分組聚合較多的場景中,DECODE和CASE語句則力有不逮。而pivot則可完美解決這一切。

   首先,我們來看看Oracle對于其的解釋:

 

  可見,pivot是數據倉庫中的關鍵技術,它利用交叉查詢(crosstabulation query)將行轉換為列。

  基本語法如下:

 

  1. SELECT .... 
  2. FROM <table-expr> 
  3.    PIVOT 
  4.      ( 
  5.       aggregate-function(<column>) 
  6.       FOR <pivot-columnIN (<value1>, <value2>,..., <valuen>) 
  7.         ) AS <alias> 
  8. WHERE ..... 

 

  下面我們來通過具體的案例對其進行闡述。

  首先,構造案例所需的數據,

  1> 創建視圖,以EMP表的數據作為源數據。

 

  1. CREATE VIEW emp_view AS 
  2. SELECT 
  3.  deptno,job,to_char(hiredate,'yyyy') hiredate, 
  4.  count(*) cnt,sum(sal) sum_sal 
  5. FROM emp 
  6. GROUP BY deptno,job,to_char(hiredate,'yyyy'); 

 

  其中,deptno為部門號,job為工作的類型(即工種),hiredate為雇傭的日期,cnt為特定部門,特定工種在特定年份雇傭的員工的總數,sum_sal為特定部門,特定工種,特定年份雇傭的員工的工資的總和。

  2> 視圖的數據如下:

 

  1. SQL> select * from emp_view; 
  2.  
  3.     DEPTNO JOB       HIRE        CNT    SUM_SAL 
  4. ---------- --------- ---- ---------- ---------- 
  5. CLERK     1980          1        800 
  6. ANALYST   1981          1       3000 
  7. ANALYST   1987          1       3000 
  8. CLERK     1981          1        950 
  9. MANAGER   1981          1       2850 
  10. MANAGER   1981          1       2450 
  11. SALESMAN  1981          4       5600 
  12. MANAGER   1981          1       2975 
  13. PRESIDENT 1981          1       5000 
  14. CLERK     1982          1       1300 
  15. CLERK     1987          1       1100 
  16. rows selected. 

 

  應用場景一:

  基本的Pivot轉換

  例1:

 

  1. SELECT * FROM 
  2. SELECT deptno,hiredate,cnt 
  3.   FROM emp_view 
  4.  ) PIVOT (SUM(cnt) 
  5.    FOR hiredate IN ('1980' AS "1980",'1981' AS "1981"
  6.                     '1982' AS "1982",'1987' AS "1987")) 
  7. ORDER BY deptno; 
  8.  
  9.     DEPTNO       1980       1981       1982       1987 
  10. ---------- ---------- ---------- ---------- ---------- 
  11.                     2          1 
  12.          1          2                     2 
  13.                     6 
  14. rows selected. 

 

  例2:

 

  1. SELECT * FROM 
  2. SELECT deptno,job,cnt 
  3.   FROM emp_view 
  4.  ) PIVOT (SUM(cnt) 
  5.    FOR job IN ('CLERK','ANALYST','MANAGER','SALESMAN','PRESIDENT')) 
  6. ORDER BY deptno; 
  7.  
  8.     DEPTNO    'CLERK'  'ANALYST'  'MANAGER' 'SALESMAN' 'PRESIDENT' 
  9. ---------- ---------- ---------- ---------- ---------- ----------- 
  10.          1                     1                      1 
  11.          2          2          1 
  12.          1                     1          4 
  13. rows selected. 

 

  兩例以不同的列進行統計,前者是hiredate,后者是job。

  除此之外,前者用了別名,后面沒有用別名,兩者的顯示效果也是不一樣的。

  應用場景二:

  對多列進行Pivot轉換

 

  1. SELECT * FROM 
  2. SELECT deptno,job,hiredate,cnt 
  3.   FROM emp_view 
  4.  ) PIVOT (SUM(cnt) 
  5.             FOR (job,hiredate) IN 
  6.               (('CLERK','1980'AS clerk_1980, 
  7.                ('CLERK','1981'AS clerk_1981, 
  8.                ('ANALYST','1987'AS analyst_1987, 
  9.                ('MANAGER','1981'AS manager_1981 
  10.               ) 
  11.            ) 
  12. ORDER by deptno; 
  13.  
  14.     DEPTNO CLERK_1980 CLERK_1981 ANALYST_1987 MANAGER_1981 
  15. ---------- ---------- ---------- ------------ ------------ 
  16.                                               1 
  17.          1                       1            1 
  18.                     1                         1 
  19. rows selected. 

 

  限于篇幅,FOR (job,hiredate) IN語句中沒有列出更多組合,只列出了四組,當然,我們可以根據實際場景需要羅列更多的組合。

  從本例中可以看出,對兩個列進行Pivot轉換可從三個維度呈現統計結果。

  應用場景三:

  用Pivot實現多個聚合

 

  1. SELECT * FROM 
  2. SELECT deptno,hiredate,cnt,sum_sal 
  3.   FROM emp_view 
  4.  ) PIVOT ( SUM(cnt) AS cnt, 
  5.            SUM(sum_sal) AS sum_sal 
  6.            FOR hiredate IN ('1980','1981','1982','1987')) 
  7. ORDER BY deptno; 
  8.  
  9.     DEPTNO '1980'_CNT '1980'_SUM_SAL '1981'_CNT '1981'_SUM_SAL '1982'_CNT '1982'_SUM_SAL '1987'_CNT '1987'_SUM_SAL 
  10. ---------- ---------- -------------- ---------- -------------- ---------- -------------- ---------- -------------- 
  11.                                    2           7450          1           1300 
  12.          1            800          2           5975                                    2           4100 
  13.                                    6           9400 
  14. rows selected. 

 

  '1981'_CNT指的是1981年雇傭的員工的總數,'1981'_SUM_SAL指的是1981年雇傭員工所開出的工資。

  具體到本例中,即1981年10號部門招聘了2位員工,開出的工資合計為7450元,20號部門招聘了2位員工,開出的工資合計為5975元,30號部門招聘了6名員工,開出的工資合計為9400元,依次類推。

  既然有pivot將行轉換為列,同樣也有unpivot操作將聚合后的列轉換為行。

  UNPIVOT

  以上述應用場景三的結果作為源數據進行操作

 

  1. CREATE TABLE T1 AS 
  2. SELECT * FROM 
  3. SELECT deptno,hiredate,cnt,sum_sal 
  4.   FROM emp_view 
  5.  ) PIVOT ( SUM(cnt) AS cnt, 
  6.            SUM(sum_sal) AS sum_sal 
  7.            FOR hiredate IN ('1980' AS "1980",'1981' AS "1981"
  8.                             '1982' AS "1982",'1987' AS "1987")) 
  9. ORDER BY deptno 

 

  表T1的結果為:

 

  1. SQL> select * from t1; 
  2.  
  3.     DEPTNO   1980_CNT 1980_SUM_SAL   1981_CNT 1981_SUM_SAL   1982_CNT 1982_SUM_SAL   1987_CNT 1987_SUM_SAL 
  4. ---------- ---------- ------------ ---------- ------------ ---------- ------------ ---------- ------------ 
  5.                                  2         7450          1         1300 
  6.          1          800          2         5975                                  2         4100 
  7.                                  6         9400 
  8. rows selected. 

 

  首先進行一維unpivot

 

  1. SELECT deptno,DECODE(hiredate,'1980_CNT','1980','1981_CNT','1981','1982_CNT','1982','1987_CNT','1987'AS hiredate,cnt 
  2. FROM T1 
  3. UNPIVOT INCLUDE NULLS 
  4. ( cnt 
  5.   FOR hiredate IN ("1980_CNT","1981_CNT","1982_CNT","1987_CNT")); 
  6.  
  7.     DEPTNO HIRE        CNT 
  8. ---------- ---- ---------- 
  9. 1980 
  10. 1981          2 
  11. 1982          1 
  12. 1987 
  13. 1980          1 
  14. 1981          2 
  15. 1982 
  16. 1987          2 
  17. 1980 
  18. 1981          6 
  19. 1982 
  20. 1987 
  21. rows selected. 

 

  輸出的結果為不同部門在不同年份的雇傭人數,

  注意:上述SQL語句中UNPIVOT后加了INCLUDE NULLS,當然也可以指定為EXCLUDE NULLS,即排除cnt為空的值,如果不指定,則默認為EXCLUDE NULLS。

  UNPIVOT后不指定INCLUDE NULLS的輸入結果為:

 

  1. DEPTNO HIRE        CNT 
  2. ---------- ---- ---------- 
  3. 1981          2 
  4. 1982          1 
  5. 1980          1 
  6. 1981          2 
  7. 1987          2 
  8. 1981          6 
  9. rows selected. 

 

  下面,我們再進行二維unpivot

 

  1. SELECT deptno,hiredate,cnt,sum_sal 
  2. FROM T1 
  3. UNPIVOT 
  4. ( (cnt,sum_sal) 
  5.   FOR hiredate IN (("1980_CNT","1980_SUM_SAL"AS 1980, 
  6.                    ("1981_CNT","1981_SUM_SAL"AS 1981, 
  7.                    ("1982_CNT","1982_SUM_SAL"AS 1982, 
  8.                    ("1987_CNT","1987_SUM_SAL"AS 1987)); 
  9.  
  10.     DEPTNO   HIREDATE        CNT    SUM_SAL 
  11. ---------- ---------- ---------- ---------- 
  12.       1981          2       7450 
  13.       1982          1       1300 
  14.       1980          1        800 
  15.       1981          2       5975 
  16.       1987          2       4100 
  17.       1981          6       9400 
  18. rows selected. 

 

  輸入結果為T1表列轉行的結果。

  參考文檔:

  SQL for Analysis and Reporting

責任編輯:honglu 來源: 博客園
相關推薦

2011-07-15 09:04:42

PIVOTUNPIVOT

2024-05-17 08:52:43

SQL實用技巧行列轉換

2011-03-15 09:10:47

iptablesNAT

2011-03-15 14:26:23

iptablesNAT

2010-03-04 15:24:14

Python程序

2020-05-09 10:38:31

Python透視表數據

2018-03-15 14:07:17

潤乾Excel行列轉換

2017-10-11 16:19:36

jquery留言框設計

2017-10-27 22:03:35

javascrip

2016-09-26 15:14:28

Javascript前端vue

2010-05-24 10:23:34

實現MySQL

2018-03-30 10:26:24

行間距行高iOS

2023-02-26 01:37:57

goORM代碼

2015-07-09 09:49:39

PHPSocket服務器

2015-07-06 13:36:14

Redis微博關注關系

2011-07-22 13:22:10

Java.NETDataTable

2021-03-02 10:57:39

二叉樹二叉堆節點

2018-08-31 09:55:38

Ansible網絡自動化

2009-02-05 14:17:37

FTP服務器Java

2010-05-25 13:47:53

MySQL 命令
點贊
收藏

51CTO技術棧公眾號

欧美一区在线直播| 日韩一卡二卡三卡国产欧美| 久久亚洲高清| 亚洲综合精品在线| 欧美va亚洲va日韩∨a综合色| 日韩小视频在线观看专区| 国产九九九九九| av在线电影免费观看| 国产一级精品在线| 热久久美女精品天天吊色| 亚洲天堂精品一区| 欧美1区2区3区4区| 欧美少妇一区二区| 日韩 欧美 视频| 精品电影在线| 丁香天五香天堂综合| 国产精品女主播视频| 国产一级片播放| 日韩久久电影| 日韩av在线免费播放| 亚洲欧美aaa| 老司机2019福利精品视频导航| 中文字幕在线观看不卡| 久久青青草综合| av一级黄色片| 美女任你摸久久| 97色在线观看免费视频| av黄色免费在线观看| 偷拍精品福利视频导航| 91精品国产综合久久久久久| 97在线免费公开视频| 欧美aaa免费| 成人欧美一区二区三区1314| 欧美日韩亚洲免费| 丰满肉肉bbwwbbww| 精品制服美女丁香| 国产欧美日韩精品丝袜高跟鞋| 日本午夜小视频| 午夜国产一区| 久久网福利资源网站| 极品蜜桃臀肥臀-x88av| 国产欧美高清视频在线| 亚洲精品乱码久久久久久按摩观| 精品人妻一区二区三| 欧美91在线|欧美| 欧美伊人久久久久久久久影院| 一区二区传媒有限公司| caoporn视频在线| 亚洲最色的网站| 一二三四中文字幕| 九色porny丨首页在线| 国产精品久久久久久久久久免费看 | 男女视频在线| 依依成人综合视频| 亚洲啊啊啊啊啊| 天堂av资源在线观看| 日韩一区日韩二区| 91xxx视频| 亚洲国产精品精华素| 一二三区精品福利视频| 日韩黄色片在线| 91色在线看| 激情av一区二区| 国产精品无码av在线播放| 台湾佬中文娱乐网欧美电影| 欧美日韩国产麻豆| 日本成人黄色网| av免费在线一区| 欧美色综合网站| www,av在线| 一区二区三区四区视频免费观看 | 久久理论电影| 久久亚洲精品网站| 精品少妇久久久| 亚洲精品影视| 国产999精品| 亚洲手机在线观看| 国产伦精品一区二区三区免费迷 | 久久91精品| 国产一区二区三区精品久久久 | 一起操在线视频| 91成人精品观看| 精品久久人人做人人爽| 亚洲中文字幕无码av| 国产精品一区二区三区av麻| 在线视频欧美日韩| 波多野结衣亚洲色图| 亚洲毛片播放| 国产精品极品美女在线观看免费 | 精品国产免费久久 | 夜夜春成人影院| 中文字幕亚洲无线码a| 手机看片国产日韩| 韩国久久久久| 国产精品美女在线观看| 国产黄色av网站| 久久影音资源网| 咪咪色在线视频| 啊啊啊久久久| 欧美久久一区二区| 五十路六十路七十路熟婆| 色无极亚洲影院| 欧美精品www在线观看| 高清乱码免费看污| 国产福利一区二区三区视频在线| 免费不卡亚洲欧美| av网站在线看| 欧美系列亚洲系列| 懂色av粉嫩av蜜乳av| 91高清一区| 国产精品99久久久久久白浆小说| 精品国自产在线观看| 国产性天天综合网| 久久99中文字幕| 欧美高清免费| 亚洲人成网站在线播| 久久久精品99| 精品无人区卡一卡二卡三乱码免费卡 | 国产va亚洲va在线va| 成人国产综合| 亚洲精品一区av在线播放| 青青草在线观看视频| 日本欧美在线观看| 免费成人深夜夜行视频| 国产偷倩在线播放| 欧美一区二区三区免费观看视频| 中文字幕在线1| 日韩图片一区| y111111国产精品久久婷婷| 性开放的欧美大片| 一本色道亚洲精品aⅴ| 99re这里只有| 激情久久婷婷| av成人午夜| av观看在线| 7799精品视频| 人人艹在线视频| 蜜桃91丨九色丨蝌蚪91桃色| 日本精品视频一区| 美女福利一区二区| 亚洲美女性生活视频| 国产第一页第二页| 国产a精品视频| 欧美黄色免费网址| 66精品视频在线观看| 久久6免费高清热精品| 国产福利资源在线| 亚洲少妇中出一区| 国产91在线免费观看| 欧美成人高清| 成人国产一区二区| 欧美xxx黑人xxx水蜜桃| 精品久久久三级丝袜| 久久久久久久久艹| 成人精品gif动图一区| 免费高清一区二区三区| 久久1电影院| 91精品国产高清自在线 | 91色porny| 日本在线视频www| 精品国产精品| 国产精品入口夜色视频大尺度| 国产系列在线观看| 欧美日韩在线播| 2025国产精品自拍| 成人午夜视频免费看| 少妇人妻无码专区视频| 人人香蕉久久| 国产精品福利在线观看| 嫩草在线视频| 日韩精品一区二区在线| 亚洲精品在线观看av| 久久女同性恋中文字幕| 天堂在线资源视频| 中文在线日韩| 国产一区二区视频在线免费观看| 91精品论坛| www.亚洲一区| 亚洲国产精品久久久久久久| 午夜激情综合网| 国产精品一二三区在线观看| 久久国产精品露脸对白| 伊人再见免费在线观看高清版| 福利在线一区| 国产精品福利网站| 羞羞污视频在线观看| 精品视频偷偷看在线观看| 免费黄色一级大片| 亚洲黄色av一区| 精品国产av无码| 激情综合色丁香一区二区| 国产精品国产对白熟妇| 国产一区二区精品久| 亚洲精品免费一区二区三区| 天堂√中文最新版在线| 久久天天躁狠狠躁夜夜躁2014 | 精品国产18久久久久久二百| 97香蕉超级碰碰久久免费的优势| 日韩a级作爱片一二三区免费观看| 亚洲综合激情视频| 欧美日韩1区| 欧美亚洲精品日韩| 久久精品一级| 国产不卡av在线免费观看| av在线免费网址| 精品香蕉一区二区三区| 国产农村妇女毛片精品| 色婷婷久久一区二区三区麻豆| 日本福利片在线观看| 97久久精品人人做人人爽 | 日韩精品成人一区二区在线| 91传媒免费视频| 成人3d动漫在线观看| 国产精品乱码视频| 亚洲资源在线| 国产精品免费视频久久久| 国产va在线视频| 欧美国产日韩xxxxx| 午夜精品一区| 亚洲一二在线观看| 亚洲av片在线观看| 精品久久久久久久久久久院品网 | 久艹在线观看视频| 国产日韩影视精品| 久久午夜夜伦鲁鲁片| 国产成人午夜精品5599 | 免费在线观看一区| 欧美做受高潮电影o| bl视频在线免费观看| 久热爱精品视频线路一| 中文字幕在线免费| 在线a欧美视频| 黄色av网站在线看| 日韩经典中文字幕| 天天操天天干天天舔| 亚洲成人xxx| 后进极品白嫩翘臀在线视频| 欧美一级片在线看| 91一区二区视频| 欧美日韩在线播| 中文字幕乱伦视频| 欧美午夜电影网| 亚洲成人av网址| 欧美伊人精品成人久久综合97| 亚洲va在线观看| 日韩欧美黄色动漫| 国产性生活视频| 日本丶国产丶欧美色综合| 日本免费精品视频| 在线观看视频91| 特级西西444www大胆免费看| 欧美性生活久久| 一区二区视频免费| 欧美狂野另类xxxxoooo| 97精品人妻一区二区三区香蕉| 欧美日韩二区三区| 国产精品羞羞答答在线| 日韩一区二区麻豆国产| 亚洲女同志亚洲女同女播放| 欧美精品一区二区在线播放| 亚洲AV第二区国产精品| 亚洲男人天堂视频| av网站无病毒在线| 久久精品成人欧美大片古装| 2020国产在线视频| 久久久久久久影院| 一区二区三区四区日本视频| 国产成人精品a视频一区www| 成人日韩av| 亚洲aⅴ男人的天堂在线观看 | 男人av资源站| 一区二区三区**美女毛片| 日产精品久久久久| 91国模大尺度私拍在线视频| 欧美brazzers| 91精品国产麻豆国产自产在线| 亚洲国产中文字幕在线| 日韩av在线精品| 免费观看在线黄色网| 欧美激情视频一区二区三区不卡| 中文字幕在线视频网站| 国产欧美日韩高清| 精品淫伦v久久水蜜桃| 日本黄网免费一区二区精品| 中文字幕一区二区三区久久网站| 欧美视频在线观看视频 | 99精品视频免费版的特色功能| 懂色av一区二区三区蜜臀| 国产精品无码久久久久一区二区| 中文字幕一区免费在线观看| 久久这里只有精品免费| 在线观看亚洲专区| 国产综合在线播放| 中文字幕精品一区二区精品| 欧美人与禽性xxxxx杂性| 国产va免费精品高清在线观看| 精品入口麻豆88视频| 免费国产在线精品一区二区三区| 香港欧美日韩三级黄色一级电影网站| www.av片| 韩日av一区二区| 色噜噜日韩精品欧美一区二区| 成人欧美一区二区三区黑人麻豆 | 亚洲熟女少妇一区二区| 亚洲福利一二三区| 在线免费av片| 日韩国产中文字幕| 日本成人不卡| 国产日韩欧美影视| 免费欧美一区| 97超碰在线人人| 久久国产综合精品| 久久久久久国产精品无码| 亚洲一区二区三区中文字幕| 一区二区视频网站| 亚洲女人初尝黑人巨大| 激情网站在线| 91亚洲va在线va天堂va国| 国产成人一区| 九色在线视频观看| 国产成人免费视频网站 | 黄色在线视频观看网站| 国自在线精品视频| 亚洲精品一区二区三区在线| 亚洲一区三区电影在线观看| 羞羞答答国产精品www一本 | 中文字幕日韩在线| 国产成人三级视频| 精品综合久久久久久8888| 永久免费毛片在线观看| 欧美性极品xxxx做受| 色屁屁草草影院ccyycom| 久久久久免费精品国产| 亚洲不卡视频| 麻豆映画在线观看| 国产成人一级电影| 欧美日韩偷拍视频| 欧美一区二区免费| 国产不卡在线| 2022国产精品| 欧美激情偷拍| 国产chinesehd精品露脸| 一区二区三区在线视频免费 | 国产不卡视频在线播放| 久久久久亚洲av片无码| 欧美一区二区视频在线观看| 国产在线激情| 亚洲自拍高清视频网站| 正在播放日韩欧美一页| 麻豆网站免费观看| 亚洲午夜免费电影| 欧美自拍第一页| 2019中文字幕免费视频| 亚洲免费观看高清完整版在线观| 欧美成人xxxxx| 久久午夜电影网| 免费黄色一级大片| 精品国偷自产在线视频99| 中文成人激情娱乐网| 大片在线观看网站免费收看| 国产高清一区日本| 91精品国产高潮对白| 精品网站999www| 成人激情视屏| 欧美一级特黄aaaaaa在线看片| 国产91丝袜在线播放| 中文字幕在线观看视频网站| 亚洲天堂视频在线观看| 久久三级毛片| 青青视频免费在线| 91网站在线播放| 中文字幕一区二区三区四区免费看| 这里只有精品丝袜| 久久久久亚洲精品中文字幕| 男人天堂av片| 国产丝袜美腿一区二区三区| 亚洲在线精品视频| 欧美精品videossex性护士| 台湾佬综合网| 岛国毛片在线播放| 亚洲主播在线观看| 日韩精品视频无播放器在线看| 国产精品久久久久久久天堂| 伊人色**天天综合婷婷| 中文字幕日韩三级片| 欧美二区三区的天堂| www.51av欧美视频| 亚洲精品一区二区三区蜜桃久| 国产激情精品久久久第一区二区| 好吊妞视频一区二区三区| 色综合伊人色综合网| 国产在线播放精品| 中文字幕天天干| 亚洲韩国精品一区| 超碰免费在线| 韩国精品一区二区三区六区色诱| 日本免费在线视频不卡一不卡二| 精品97人妻无码中文永久在线| 亚洲美女自拍视频| 51精品国产|