精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

青草成人免费视频| 精品久久一区二区| 天天做天天爱天天高潮| xxxx18国产| 一区二区国产精品| 亚洲一级一级97网| 亚洲天堂av一区二区三区| 波多一区二区| 国产精品入口麻豆原神| 99久久精品久久久久久ai换脸| 国产无精乱码一区二区三区| 欧美色女视频| 日韩免费高清av| 日韩一级在线免费观看| 亚洲综合影视| 欧美极品另类videosde| 成人免费在线看片| 久草热在线观看| 亚洲大片在线| 日韩视频精品在线| 国内精品久久99人妻无码| 亚洲欧美在线成人| 亚洲r级在线视频| 亚洲欧美电影在线观看| 无码h黄肉3d动漫在线观看| 国产麻豆精品久久一二三| 啪一啪鲁一鲁2019在线视频| 五月天丁香激情| 日韩精品欧美| 亚洲久久久久久久久久| 波多野结衣三级视频| 草民电影神马电影一区二区| 天天影视网天天综合色在线播放| 综合一区中文字幕| 福利视频在线导航| 91色porny| 国产精品国产精品国产专区不卡| 国产精品毛片久久久久久久av | 大陆极品少妇内射aaaaa| 国产精品剧情| 国产精品国产三级国产普通话蜜臀 | 亚洲日本aⅴ片在线观看香蕉| 亚洲av熟女高潮一区二区| 国产高清日韩| 91麻豆精品久久久久蜜臀| 精品少妇无遮挡毛片| 欧美freesex| 日韩欧美亚洲国产一区| 国产69精品久久久久久久| 欧美激情成人动漫| 一区二区三区精密机械公司| 色哺乳xxxxhd奶水米仓惠香| 老司机在线看片网av| 国产精品福利电影一区二区三区四区| 日韩精品电影网站| 国产视频三级在线观看播放| 久久久www成人免费无遮挡大片| 激情久久av| 亚州av在线播放| 91美女在线视频| 免费在线国产精品| 国产三级视频在线播放线观看| 久久久久久97三级| 色99中文字幕| 色大18成网站www在线观看| 国产精品久久精品日日| 亚洲最新在线| 四虎亚洲精品| 婷婷一区二区三区| 国产麻花豆剧传媒精品mv在线| 午夜av不卡| 在线看日本不卡| gogogo高清免费观看在线视频| 久久久加勒比| 日韩欧美一级二级| www.男人天堂| 精品国产乱码久久久久久蜜坠欲下| 日韩av中文字幕在线免费观看| 女同毛片一区二区三区| 久久视频国产| 欧美激情欧美狂野欧美精品| 日韩欧美不卡视频| 日韩1区2区日韩1区2区| 91麻豆国产语对白在线观看| 亚洲国产综合网| 久久影视一区二区| 亚洲精品日韩在线观看| 性网站在线观看| 疯狂做受xxxx高潮欧美日本| 无码内射中文字幕岛国片| 国产不卡精品| 亚洲女人天堂色在线7777| 欧美亚洲色综久久精品国产| 欧美国产综合| 91av在线网站| 国产精品久久久久久久久毛片 | 中文日韩在线| 91精品国产综合久久香蕉| 亚洲成a人片在线| 国产午夜亚洲精品午夜鲁丝片| 99亚洲精品视频| yellow字幕网在线| 欧美日韩一区二区三区视频| 亚洲一区和二区| 日韩免费高清| 91精品国产电影| 国产精品免费无遮挡| 91啪亚洲精品| 国产精品videossex国产高清| 二区三区不卡| 日韩视频国产视频| 日本黄色激情视频| 国产欧美日韩一级| 91成人免费在线观看| 国产高清免费av在线| 亚洲尤物在线视频观看| 欧美日韩精品区别| 国产剧情在线观看一区| 欧美国产日韩免费| 国产又大又粗又硬| 国产日韩欧美制服另类| 精品无码一区二区三区爱欲| 95精品视频| 国产一区二区激情| 91精品国产高清一区二区三密臀| 国产成人在线视频网址| 制服丝袜综合日韩欧美| 欧美日韩视频免费观看| 日韩精品在线视频观看| 18精品爽视频在线观看| 久久 天天综合| 亚州欧美一区三区三区在线| 中文一区一区三区高中清不卡免费 | 欧美老妇交乱视频| 一级黄色免费片| 欧美国产日韩a欧美在线观看| 久久久亚洲精品无码| 99亚洲乱人伦aⅴ精品| 成年人精品视频| 国产乱淫a∨片免费观看| 国产精品盗摄一区二区三区| 北条麻妃av高潮尖叫在线观看| 日韩动漫一区| 3344国产精品免费看| 婷婷开心激情网| 午夜久久久久久电影| youjizz.com日本| 激情欧美一区| 狠狠色伊人亚洲综合网站色| 春色校园综合激情亚洲| 亚洲激情成人网| 在线观看国产亚洲| 99精品桃花视频在线观看| 激情五月宗合网| 欧美精品中文字幕亚洲专区| 91精品国产成人www| 亚洲人在线观看视频| 日韩欧美中文字幕在线播放| 90岁老太婆乱淫| 视频一区在线视频| 视频一区二区综合| 欧美男女视频| 欧美大肥婆大肥bbbbb| 国产a级免费视频| 亚洲一区精品在线| 星空大象在线观看免费播放| 亚洲欧美日韩国产一区二区| 欧洲久久久久久| 国产成人午夜性a一级毛片| 色综久久综合桃花网| 国产浮力第一页| 亚洲成人av一区二区三区| 香蕉视频黄色在线观看| 日韩va亚洲va欧美va久久| 一区二区三区在线观看www| 麻豆国产一区| 91精品国产电影| 98在线视频| 欧美成人午夜电影| 中文字幕黄色片| 亚洲欧洲国产日本综合| 伊人影院在线观看视频| 国产日韩专区| 中文字幕一区二区中文字幕 | 免费高清视频精品| 好吊色视频988gao在线观看| 欧美人与动xxxxz0oz| 国产美女搞久久| free性欧美| 一区二区三区天堂av| 国产丰满美女做爰| 欧日韩精品视频| 九九九在线视频| 久久精品亚洲国产奇米99| 国产成人av免费观看| 久久亚洲不卡| 激情五月婷婷六月| 残酷重口调教一区二区| 国产伦精品一区二区三区免费视频| 成人软件在线观看| 欧美大片在线免费观看| 成人资源www网在线最新版| 欧美不卡在线视频| 久久久久久久久久一级| 亚洲二区在线视频| 日韩欧美在线视频播放| 91在线精品一区二区| 亚洲一区二区偷拍| 久久久久国内| 真人抽搐一进一出视频| 国产精品久久久久9999赢消| 欧美日韩电影一区二区| 影音先锋欧美激情| 成人在线国产精品| av有声小说一区二区三区| 欧美激情在线观看视频| 免费黄色网址在线观看| 亚洲精品国产精品自产a区红杏吧 亚洲精品国产精品乱码不99按摩 亚洲精品国产精品久久清纯直播 亚洲精品国产精品国自产在线 | 国产精品视频xxxx| 交100部在线观看| 欧美大胆在线视频| 日韩子在线观看| 亚洲性生活视频| 天堂成人在线| 69成人精品免费视频| 波多野结衣影片| 婷婷丁香久久五月婷婷| 激情五月婷婷在线| 亚洲精品菠萝久久久久久久| 国产精品久久久免费看| 国产欧美日韩激情| 亚洲一级中文字幕| 久久天天做天天爱综合色| 国产老熟女伦老熟妇露脸| 国产**成人网毛片九色| av在线天堂网| 国产91丝袜在线观看| 国产精品欧美性爱| 国产1区2区3区精品美女| 成年人看片网站| 国产精品一区二区久激情瑜伽| 亚洲最大天堂网| 久久97超碰国产精品超碰| 一女二男3p波多野结衣| 麻豆久久久久久| 欧美一级小视频| 久久99国产乱子伦精品免费| 我要看一级黄色大片| 蜜臀a∨国产成人精品| www.日本一区| 久久国产精品72免费观看| 欧美日韩中文不卡| 国产揄拍国内精品对白| 中文字幕无码毛片免费看| 国产精品一二二区| 国产一卡二卡三卡四卡| 白白色亚洲国产精品| 黄色在线观看av| 国产亚洲精品资源在线26u| 1024手机在线观看你懂的| 中文字幕乱码亚洲精品一区| 人妻无码一区二区三区免费| 国产精品护士白丝一区av| 日韩欧美123区| 亚洲一二三区视频在线观看| 91porny在线| 在线亚洲高清视频| 国产精品一二三四五区| 精品福利二区三区| 天堂av在线7| 中文字幕日韩在线观看| a毛片在线观看| 午夜精品久久久久久久99黑人| 日本不卡免费高清视频在线| 国产91亚洲精品| 日韩城人网站| 国产精品yjizz| 国内精品久久久久久99蜜桃| 少妇熟女一区二区| 99精品热视频只有精品10| 国产一线二线三线在线观看| 狠狠色综合日日| 成人午夜精品无码区| 亚洲国产成人在线| 久久久久久久久久久久久久久久久| 精品久久久久久亚洲精品| 亚洲欧美日韩一区二区三区四区| 欧美一区二区三区免费观看视频 | 麻豆一区二区在线观看| a√中文在线观看| 国产精品欧美日韩一区二区| 日韩一区二区三区高清在线观看| 久久免费一区| 中文字幕日韩一区二区不卡| heyzo国产| 国产一区二区三区免费| 亚洲第一成人网站| 夜夜嗨av一区二区三区网页 | 欧美激情一区二区三区在线视频| 91综合在线| 人妻有码中文字幕| 国产成人午夜99999| 阿v天堂2014| 调教+趴+乳夹+国产+精品| av手机免费看| 一区二区三区黄色| 1区2区在线| 国产综合色香蕉精品| 免费观看久久av| 精品人妻大屁股白浆无码| 久88久久88久久久| 日本xxxxxxxxx18| 亚洲第一成人在线| 国产免费一区二区三区免费视频| 亚洲美女性生活视频| 美女网站视频在线| 成人日韩av在线| 精品久久综合| www.浪潮av.com| 成人午夜视频在线观看| 日韩在线一卡二卡| 欧美影院一区二区三区| 无套内谢的新婚少妇国语播放| 久久99久国产精品黄毛片入口 | 国产69精品久久久久9999apgf| 欧美成人精品一区二区三区在线看| 人妻内射一区二区在线视频 | 亚洲欧美卡通动漫| 在线观看日韩av先锋影音电影院| 午夜在线视频免费| 国内精品视频一区| 哺乳挤奶一区二区三区免费看| 久久av秘一区二区三区| 久久精品国产第一区二区三区| 日本成人午夜影院| 91黄色免费网站| 黄色片在线播放| 国产成人亚洲综合91精品| 国产精品手机在线播放| 国产97在线 | 亚洲| av在线播放成人| 中日韩精品视频在线观看| 亚洲成人久久一区| 高清毛片在线观看| 国精产品一区二区| 香蕉久久夜色精品| b站大片免费直播| 欧美午夜精品久久久| 久蕉依人在线视频| 国产精品久久久久久久久久三级| 精品国产日韩欧美| 一区二区三区入口| 中文字幕在线一区| 国产美女主播在线观看| 色与欲影视天天看综合网| 澳门精品久久国产| 国产白丝袜美女久久久久| 91论坛在线播放| 久久人人爽人人爽人人片av免费| 亚洲网站在线观看| 欧美一级免费| 国产美女视频免费| 大美女一区二区三区| 日韩免费观看一区二区| 一区二区欧美在线| 五月天色综合| 老司机激情视频| 99久久免费国产| 337p粉嫩色噜噜噜大肥臀| 日韩中文在线中文网在线观看| 国产一区二区| 男女激情无遮挡| 欧美国产1区2区| 精品人妻一区二区三区含羞草| 国产做受69高潮| 精品国内自产拍在线观看视频 | 一级久久久久久久| 欧美高跟鞋交xxxxxhd| 美女亚洲一区| 91国内在线播放| 亚洲成a人在线观看| 精品影院一区| 91精品天堂| 三级影片在线观看欧美日韩一区二区| 很污很黄的网站| 亚洲第一在线视频| 高清欧美日韩| 欧美视频在线观看视频| 亚洲国产精品成人久久综合一区| 国产成人久久精品77777综合 | 中文在线一区二区| 亚洲黄色在线观看视频| 国产国语刺激对白av不卡| 国产一区二区三区自拍| 高潮毛片无遮挡| 日韩美女一区二区三区四区| 久久久成人av毛片免费观看| 欧美a级免费视频| 欧美激情一区二区三区全黄| 亚洲欧美激情在线观看|