ORACLE行轉列、列轉行實現方式及案例

ORACLE行轉列、列轉行實現方式及案例

  • 行轉列
    • 案例
    • 方式1.PIVOT
    • 方式2.MAX和DECODE
    • 方式3.CASE WHEN和GROUP BY
  • 列轉行
    • 案例
    • 方式1.UNPIVOT
    • 方式2.UNION ALL

行轉列

案例

假設我們有一個名為sales的表,其中包含了產品銷售數據。表中有三列:product(產品名稱)、year(年份)和amount(銷售額)。表中的數據如下:
在這里插入圖片描述
將這個表中的數據進行行轉列,使得每一行表示一個產品,每一列表示一年的銷售額。
使得得到以下結果:
在這里插入圖片描述

方式1.PIVOT

PIVOT是Oracle 11g之后引入的一種用于行列轉換的函數。它可以將查詢結果中的行數據轉換為列數據,從而實現行列轉換。PIVOT函數的基本語法如下:

SELECT ...
FROM ...
PIVOT (aggregate_function(column_to_aggregate)FOR column_to_pivotIN (list_of_values))

其中,aggregate_function是一個聚合函數,如SUM、MAX、MIN等;column_to_aggregate是要進行聚合的列;column_to_pivot是要進行行列轉換的列;list_of_values是要轉換為列的值的列表。

實現案例所示效果可以通過如下方式:

SELECT *
FROM sales
PIVOT (SUM(amount) FOR year IN (2018, 2019, 2020));

方式2.MAX和DECODE

DECODE 可以根據條件返回不同的值。DECODE 函數的基本語法如下:

DECODE(expression, search1, result1,search2, result2, ..., default)

其中,expression 是要進行比較的表達式;search1、search2 等是要進行比較的值;result1、result2 等是當表達式與對應的搜索值相等時返回的結果;default 是當表達式與所有搜索值都不相等時返回的默認值。

若要實現案例的效果可以通過以下方式:

SELECT product,MAX(DECODE(year, 2018, amount)) AS "2018",MAX(DECODE(year, 2019, amount)) AS "2019",MAX(DECODE(year, 2020, amount)) AS "2020"
FROM sales
GROUP BY product;

注意:這里取的是每年數據的最大值,每年每產品指只會一條,而方式3是取總和

方式3.CASE WHEN和GROUP BY

SELECT product,SUM(CASE WHEN year = 2018 THEN amount END) AS "2018",SUM(CASE WHEN year = 2019 THEN amount END) AS "2019",SUM(CASE WHEN year = 2020 THEN amount END) AS "2020"
FROM sales
GROUP BY product;

注意:這里取的是每年數據的總和,每年每產品的總和,而方式2是取最大的一條

列轉行

案例

與行轉列的案例相反假設我們有一個名為sales的表,其中包含了產品銷售數據。表中有四列:product(產品名稱)、2018(2018年銷售額)、2019(2019年銷售額)和2020(2020年銷售額)。表中的數據如下:
在這里插入圖片描述
現在我們想要將這個表中的數據進行列轉行,使得每一行表示一個產品在某一年的銷售額。
實現效果如下:
在這里插入圖片描述

方式1.UNPIVOT

UNPIVOT是Oracle中用于實現列轉行的函數,基本語法如下:

SELECT ...
FROM ...
UNPIVOT (column_to_unpivotFOR new_column_nameIN (list_of_columns))

其中,column_to_unpivot是要進行列轉行的列;new_column_name是新生成的列的名稱;list_of_columns是要轉換為行的列的列表。

實現案例中的結果可以用如下方式:

SELECT *
FROM sales
UNPIVOT (amount FOR year IN ("2018", "2019", "2020"));

方式2.UNION ALL

SELECT product, '2018' AS year, "2018" AS amount FROM sales
UNION ALL
SELECT product, '2019' AS year, "2019" AS amount FROM sales
UNION ALL
SELECT product, '2020' AS year, "2020" AS amount FROM sales;

注意:單引號表示的是固定字符2018即字段名2018,雙引號表示字段2018下的值

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35349.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35349.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35349.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

FPGA實踐 ——Verilog基本實驗步驟演示

0x00 回顧:AND/OR/NOT 邏輯的特性 AND:與門可以具有兩個或更多的輸入,并返回一個輸出。當所有輸入值都為 1 時,輸出值為 1。如果輸入值中有任何一個為 0,則輸出值為 0。 OR:或門可以具有兩個或更多的輸入…

【python】-【】

文章目錄 轉義字符和原字符二進制與字符編碼標識符和保留字變量的定義和使用變量字符串列表for 一、print會輸出①數字②字符串(必須加引號)③含有運算符的表達式(例如 31 其中3,1是操作數,是運算符)&#…

vector的模擬實現

什么是vector vector是一個封裝了動態大小數組的順序容器跟任意其它類型容器一樣,它能夠存放各種類型的對象。 模擬實現 實現前的準備 在實現vector之前,為了和庫里的區分開需要將實現的vector放在一個自定義的命名空間里。而且vector需要實現成模版…

論文閱讀 - Neutral bots probe political bias on social media

論文鏈接:Neutral bots probe political bias on social media | EndNote Click 試圖遏制濫用行為和錯誤信息的社交媒體平臺被指責存在政治偏見。我們部署中立的社交機器人,它們開始關注 Twitter 上的不同新聞源,并跟蹤它們以探究平臺機制與用…

超導熱催生meme,換湯不換藥的投機輪回

文/章魚哥 出品/陀螺財經 幣圈對炒作meme概念的熱情從未消亡過。 隨著一種名為LK-99的物質被發現,圍繞超導的興奮不僅激發了科學界,加密貨幣相關概念也與之沸騰。不出所料,與此前圍繞元宇宙、AI大肆炒作一樣,許多meme代幣已經出現…

關于MySQL中的binlog

介紹 undo log 和 redo log是由Inno DB存儲引擎生成的。 在MySQL服務器架構中,分為三層:連接層、服務層(server層)、執行層(存儲引擎層) bin log 是 binary log的縮寫,即二進制日志。 MySQL…

android開發之Android 自定義滑動解鎖View

自定義滑動解鎖View 需求如下: 近期需要做一個類似屏幕滑動解鎖的功能,右劃開始,左劃暫停。 需求效果圖如下 實現效果展示 自定義view如下 /** Desc 自定義滑動解鎖View Author ZY Mail sunnyfor98gmail.com Date 2021/5/17 11:52 *…

數據結構——線性表

文章目錄 線性表的定義和基本操作順序表線性表的鏈式表示 線性表的定義和基本操作 線性表是具有相同數據類型的(n≥0)個數據元素的有限序列,其中n為表長,當n0時線性表是一個空表。若用L命名線性表,則其中一般表示為:L(a1,a2,a3, …

.NET實現解析字符串表達式

一、引子功能需求 我們創建了一個 School 對象&#xff0c;其中包含了教師列表和學生列表。現在&#xff0c;我們需要計算教師平均年齡和學生平均年齡。 //創建對象 School school new School() {Name "小菜學園",Teachers new List<Teacher>(){new Teach…

CCLINK轉MODBUS-TCP網關cclink通訊接線圖 終端電阻

大家好&#xff0c;今天我們要聊的是生產管理系統中的CCLINK和MODBUS-TCP協議&#xff0c;它們的不同使得數據互通比較困難&#xff0c;但捷米JM-CCLK-TCP網關的出現改變了這一切。 1捷米JM-CCLK-TCP是一款自主研發的CCLINK從站功能的通訊網關&#xff0c;它的主要功能是將各種…

后端開發5.Redis的搭建

使用docker安裝 Redis【redis】(6379) 拉取Redis鏡像 docker pull redis:6.2.6 啟動Redis容器 docker run -di --name=redis -p 6379:6379 redis:6.2.6 啟動Redis容器并設置密碼 docker run -di --name=redis -p 6379:6379 redis:6.2.6 --requirepass "密碼" 測…

D455+VINS-Fusion+surfelmapping 稠密建圖(三)

繼續&#xff0c;由surfelmapping建立的點云生成octomap八叉樹柵格地圖 一、安裝OctomapServer 建圖包 安裝插件 sudo apt-get install ros-melodic-octomap-ros sudo apt-get install ros-melodic-octomap-msgs sudo apt-get install ros-melodic-octomap-server sudo apt-…

cubemx hal stm32 舵機 可減速 任意位置停止 驅動代碼

CubeMX配置 對于 STM32 F407VE 這里的84是來自APB1那路2倍頻得到&#xff1a; 代碼部分 兩個舵機都是180度的 servo.c #include "servo.h" #include "tim.h" #include "stdio.h"__IO uint32_t g_SteerUWT[2] {0}; uint16_t g_SteerDeg[…

React Native Maps的使用

介紹 React Native Maps是一個用于在React Native應用中顯示地圖的庫。它提供了許多功能&#xff0c;如顯示地圖、標記位置、繪制多邊形等。以下是React Native Maps的使用步驟&#xff1a; 使用 首先&#xff0c;你需要在你的React Native項目中安裝React Native Maps庫。可…

青大數據結構【2014】

一、單選 二、簡答 為了解決順序隊列的假溢出問題&#xff0c;提出了循環隊列&#xff0c;即把存儲隊列的表從邏輯上看成一個環 判別隊列空和滿有三種方法&#xff1a; 1&#xff09;采用計數器判別&#xff0c;空時&#xff0c;計數器為0&#xff1b;滿時&#xff0c;計數器…

【設計模式——學習筆記】23種設計模式——中介者模式Mediator(原理講解+應用場景介紹+案例介紹+Java代碼實現)

文章目錄 案例引入案例一普通實現中介者模式 案例二 介紹基礎介紹登場角色尚硅谷 《圖解設計模式》 案例實現案例一&#xff1a;智能家庭類圖實現 案例二&#xff1a;登錄頁面邏輯實現說明類圖實現 總結文章說明 案例引入 案例一 普通實現 在租房過程中&#xff0c;客戶可能…

css 實現 html 元素內文字水平垂直居中的N種方法

上一篇博文寫了div 中元素居中的N種常用方法&#xff0c;那么單個html元素&#xff1a;div&#xff08;塊級元素代表&#xff09;&#xff0c;span&#xff08;行內元素代表&#xff09;中的文字如何水平垂直都居中呢&#xff1f;實現方法如下&#xff1a; 本文例子使用的 html…

WebAPIs 第二天

DOM事件基礎 事件監聽事件類型事件對象 一.事件監聽 ① 概念&#xff1a;就是讓程序檢測是否有事件發生&#xff0c;一旦有事件觸發&#xff0c;就立即調用一個函數做出響應&#xff0c;也成為綁定事件或者注冊事件 ② 語法&#xff1a;元素對象.addEventListener(事件類型&…

機器學習---對數幾率回歸

1. 邏輯回歸 邏輯回歸&#xff08;Logistic Regression&#xff09;的模型是一個非線性模型&#xff0c; sigmoid函數&#xff0c;又稱邏輯回歸函數。但是它本質上又是一個線性回歸模型&#xff0c;因為除去sigmoid映射函 數關系&#xff0c;其他的步驟&#xff0c;算法都是…

從零開始,貪吃蛇小游戲系列專欄完美收官!

&#x1f3ae; 從零開始&#xff0c;貪吃蛇小游戲系列專欄完美收官&#xff01; &#x1f40d; 各位游戲開發探索者們&#xff0c;大家好&#xff01;我是[億元程序員]&#xff0c;一位擁有8年游戲開發經驗的主程。經過一段時間的努力&#xff0c;我很高興地宣布&#xff0c;我…