千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > Oracle Unpivot詳解

Oracle Unpivot詳解

來源:千鋒教育
發布人:xqq
時間: 2023-11-24 21:10:33 1700831433

一、UNPIVOT概述

UNPIVOT 是 Oracle 中的一種操作,可以將多個列按照一定的規則合并成一個列。UNPIVOT的常用語法為:UNPIVOT (列名1, 列名2, ... 列名n) INCLUDE(NULLS) [AS] 集合

集合符合集合的語法,需要有一個SELECT語句作為基礎數據集,該基礎數據集中包含待合并的列,需要使用UNPIVOT來合并多個列。

UNPIVOT是廣泛應用在數據倉庫和BI(商業智能)場景中的,常用于將擁有多個相同性質列的表進行重構,也能夠將多張表中的相同字段進行合并完整數據集。


SELECT * FROM (
  SELECT deptno, job, sal, comm
  FROM emp
) 
UNPIVOT INCLUDE(NULLS) (
  SALARY
  FOR TYPE IN (SAL, COMM)
);

二、UNPIVOT實例

下面展示一個UNPIVOT的應用實例,假設我們有一個包含各個國家2020年1-12月份旅游人數的表。我們需要將所有旅游人數合并成為一個列,可以使用UNPIVOT來完成。具體實現代碼如下:


CREATE TABLE tourism(
  country VARCHAR2(100),
  Jan NUMBER,
  Feb NUMBER,
  Mar NUMBER,
  Apr NUMBER,
  May NUMBER,
  Jun NUMBER,
  Jul NUMBER,
  Aug NUMBER,
  Sep NUMBER,
  Oct NUMBER,
  Nov NUMBER,
  Dec NUMBER
);

INSERT INTO tourism VALUES('China',100,200,300,400,500,600,700,800,900,1000,1100,1200);
INSERT INTO tourism VALUES('USA',200,400,600,800,1000,1200,1400,1600,1800,2000,2200,2400);
INSERT INTO tourism VALUES('Japan',150,300,450,600,750,900,1050,1200,1350,1500,1650,1800);

SELECT * FROM tourism;

SELECT country, visitors, month
FROM 
(
  SELECT *
  FROM tourism
) 
UNPIVOT INCLUDE(NULLS) (
  visitors
  FOR month IN (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
);

三、UNPIVOT擴展知識

除了基本的UNPIVOT操作之外,還有一些特殊情況需要注意。

1.包含NULLS的情況

在UNPIVOT語句中,加入 INCLUDE(NULLS) 可以將列值為空的情況也納入UNPIVOT操作中。


SELECT country, visitors, month
FROM 
(
  SELECT *
  FROM tourism
) 
UNPIVOT INCLUDE(NULLS) (
  visitors
  FOR month IN (Jan, Feb, Mar, Apr, May, NULL, NULL, NULL, Sep, Oct, Nov, Dec)
);

2.不同類型列的合并

當待合并的列的類型不同時,列的類型將自動轉換成相同的類型,比如,等號右邊的列都是NUMBER類型,而等號左邊的列是VARCHAR2類型,UNPIVOT操作后country列自動轉換為NUMBER類型。


SELECT *
FROM 
(
  SELECT *
  FROM tourism
) 
UNPIVOT INCLUDE(NULLS) (
  tourists, country
  FOR month IN (Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec)
);

3.使用UNION ALL 和行列轉置實現UNPIVOT操作

如果數據集本身沒有支持UNPIVOT的操作,我們可以使用UNION ALL和行列轉置來實現UNPIVOT操作。


SELECT country, visitors, 'Jan' AS month
FROM tourism
UNION ALL
SELECT country, visitors, 'Feb' AS month
FROM tourism
UNION ALL
...
SELECT country, visitors, 'Dec' AS month
FROM tourism;

四、總結

本文詳細介紹了Oracle中的UNPIVOT操作,包括UNPIVOT的概述、應用實例和擴展知識。對于數據倉庫和BI領域的開發者,UNPIVOT是一個必須掌握的SQL操作,可以方便的解決表中多個相同性質列的重構問題。

聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
久久亚洲中文字幕精品一区四,亚洲日本另类欧美一区二区,久久久久久久这里只有免费费精品,高清国产激情视频在线观看
日本天堂久久久 | 亚洲欧美日韩在线综合 | 亚洲一级a爱视频在线 | 亚洲日韩欧美九九精品综合网 | 五月丁香六月婷婷视频播放器 | 免费va国产高清大片在线 |