麻豆黑色丝袜jk制服福利网站-麻豆精品传媒视频观看-麻豆精品传媒一二三区在线视频-麻豆精选传媒4区2021-在线视频99-在线视频a

千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

手機站
千鋒教育

千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

千鋒教育

掃一掃進入千鋒手機站

領(lǐng)取全套視頻
千鋒教育

關(guān)注千鋒學(xué)習(xí)站小程序
隨時隨地免費學(xué)習(xí)課程

當(dāng)前位置:首頁  >  技術(shù)干貨  > Oracle Unpivot詳解

Oracle Unpivot詳解

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

一、UNPIVOT概述

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

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

UNPIVOT是廣泛應(yīng)用在數(shù)據(jù)倉庫和BI(商業(yè)智能)場景中的,常用于將擁有多個相同性質(zhì)列的表進行重構(gòu),也能夠?qū)⒍鄰埍碇械南嗤侄芜M行合并完整數(shù)據(jù)集。


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

二、UNPIVOT實例

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


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.不同類型列的合并

當(dāng)待合并的列的類型不同時,列的類型將自動轉(zhuǎn)換成相同的類型,比如,等號右邊的列都是NUMBER類型,而等號左邊的列是VARCHAR2類型,UNPIVOT操作后country列自動轉(zhuǎn)換為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 和行列轉(zhuǎn)置實現(xiàn)UNPIVOT操作

如果數(shù)據(jù)集本身沒有支持UNPIVOT的操作,我們可以使用UNION ALL和行列轉(zhuǎn)置來實現(xiàn)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;

四、總結(jié)

本文詳細(xì)介紹了Oracle中的UNPIVOT操作,包括UNPIVOT的概述、應(yīng)用實例和擴展知識。對于數(shù)據(jù)倉庫和BI領(lǐng)域的開發(fā)者,UNPIVOT是一個必須掌握的SQL操作,可以方便的解決表中多個相同性質(zhì)列的重構(gòu)問題。

聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
免費領(lǐng)取
今日已有369人領(lǐng)取成功
劉同學(xué) 138****2860 剛剛成功領(lǐng)取
王同學(xué) 131****2015 剛剛成功領(lǐng)取
張同學(xué) 133****4652 剛剛成功領(lǐng)取
李同學(xué) 135****8607 剛剛成功領(lǐng)取
楊同學(xué) 132****5667 剛剛成功領(lǐng)取
岳同學(xué) 134****6652 剛剛成功領(lǐng)取
梁同學(xué) 157****2950 剛剛成功領(lǐng)取
劉同學(xué) 189****1015 剛剛成功領(lǐng)取
張同學(xué) 155****4678 剛剛成功領(lǐng)取
鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
董同學(xué) 138****2867 剛剛成功領(lǐng)取
周同學(xué) 136****3602 剛剛成功領(lǐng)取
相關(guān)推薦HOT
主站蜘蛛池模板: 在线观看网站禁入口不用下载 | 爱爱帝国亚洲一区二区三区| 性一交一乱一伦一色一情| 免费精品国产| 久久99热66这里只有精品一| 男人桶女人视频不要下载| 任你操网站| 国产四虎精品| 里番acg全彩本子| 久久精品99香蕉国产| 91香蕉国产线观看免| 久久中文字幕一区二区| 国产精品99久久久久久人| 菠萝蜜视频在线观看入口| 国产精品99| 精品卡一卡2卡三卡免费观看| 国产剧情jvid在线观看| 高h全肉动漫在线观看免费| 三级黄色录像片| 韩国全部三级伦电影在线播放| 亚洲欧美成人日韩| 啊轻点灬大ji巴太粗太长了欧美| 高清对白精彩国产国语| 日本漫画口工全彩内番漫画丝袜| 国模人体沟沟| 又粗又大又爽又长又紧又水| 中文字幕在线播放| 狠狠色噜噜狠狠狠狠97不卡| 国产123区在线视频观看| 中文字幕无码久久精品| 蜜桃精品| 国产欧美另类久久久精品免费| 美女扒开屁股让男人桶| 老子影院午夜伦手机电影| 好男人在线神马影视www在线观看| 久久私人影院| 久久蜜桃| 亚洲va久久久噜噜噜久久天堂 | 美女被吸乳老师羞羞漫画| 日本伊人色综合网| 亚洲国产视频网|