Oracle中實現(xiàn)行列互轉(zhuǎn)的方法分享
一、使用Case when 實現(xiàn)列轉(zhuǎn)為行(多行一列-->一行多列)
1.1、實現(xiàn)效果
①原表效果

②實現(xiàn)將Course課程列內(nèi)容轉(zhuǎn)為行效果【實現(xiàn)將每個人員的課程信息合成一行,且獲取到課程總分】

1.2、列轉(zhuǎn)行(多行一列-->一行多列)
sql語句
SELECT NAME,
MAX(CASE WHEN COURSE='語文' THEN SCORE END) "語文",
MAX(CASE WHEN COURSE='數(shù)學' THEN SCORE END) "數(shù)學",
MAX(CASE WHEN COURSE='英語' THEN SCORE END) "英語",
MAX(CASE WHEN COURSE='物理' THEN SCORE END) "物理",
SUM(SCORE) "總分"
FROM stu GROUP BY NAME;二、使用 Case When 實現(xiàn)行轉(zhuǎn)列(一行多列-->多行一列)
2.1、實現(xiàn)效果
①原表效果

②實現(xiàn)將多個數(shù)字列轉(zhuǎn)為一列效果

2.2、行轉(zhuǎn)列(一行多列-->多行一列)
sql語句
SELECT NAME, CASE WHEN LV = 1 THEN '語文' --常量 WHEN LV = 2 THEN '數(shù)學' --常量 WHEN LV = 3 THEN '英語' --常量 WHEN LV = 4 THEN '物理' --常量 END 科目, CASE WHEN LV = 1 THEN langu --列名 WHEN LV = 2 THEN math--列名 WHEN LV = 3 THEN english--列名 WHEN LV = 4 THEN pycial--列名 END 成績 FROM ( SELECT * FROM course, (SELECT LEVEL LV FROM DUAL CONNECT BY LEVEL <= 4) ) --成績對應的列數(shù) ORDER BY 1, 2;
三、將結(jié)果集轉(zhuǎn)為一行
①查詢到每個部門的人數(shù)
--查詢每個部門的人數(shù) SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO ORDER BY 1;

②將查詢到的每個部門人數(shù)的結(jié)果集【轉(zhuǎn)為一行】
--將上面的結(jié)果轉(zhuǎn)為一行,可以使用 SUM 或者 COUNT 來求出。
SELECT SUM(CASE WHEN DEPTNO = 10 THEN 1 END) D_10,
SUM(CASE WHEN DEPTNO = 20 THEN 1 END) D_20,
SUM(CASE WHEN DEPTNO = 30 THEN 1 END) D_30
FROM EMP;
--也可以使用下面的方法。
SELECT CASE WHEN DEPTNO = 10 THEN CN END D_10,
CASE WHEN DEPTNO = 20 THEN CN END D_20,
CASE WHEN DEPTNO = 30 THEN CN END D_30
FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO);
--和剛講的一樣,生成了三行三列數(shù)據(jù),使用 MAX 來獲取。
SELECT MAX(CASE WHEN DEPTNO = 10 THEN CN END) D_10,
MAX(CASE WHEN DEPTNO = 20 THEN CN END) D_20,
MAX(CASE WHEN DEPTNO = 30 THEN CN END) D_30
FROM (SELECT DEPTNO, COUNT(1) CN FROM EMP GROUP BY DEPTNO);四、將結(jié)果集轉(zhuǎn)為多行

SELECT MAX(CASE JOB WHEN 'CLERK' THEN ENAME END) CLERK,
MAX(CASE JOB WHEN 'ANALYST' THEN ENAME END) ANALYST,
MAX(CASE JOB WHEN 'MANAGER' THEN ENAME END) MANAGER,
MAX(CASE JOB WHEN 'PRESIDENT' THEN ENAME END) PRESIDENT,
MAX(CASE JOB WHEN 'SALESMAN' THEN ENAME END) SALESMAN
FROM (SELECT ENAME,
JOB,
--每組都是從 1 開始排序,而每列里面只有一組有數(shù)據(jù)。也就是 RN 相同的在每列里面只有一條數(shù)據(jù)
ROW_NUMBER() OVER(PARTITION BY JOB ORDER BY ENAME) RN
FROM EMP)
GROUP BY RN
ORDER BY RN;到此這篇關(guān)于Oracle中實現(xiàn)行列互轉(zhuǎn)的方法分享的文章就介紹到這了,更多相關(guān)Oracle行列互轉(zhuǎn)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Windows下編寫批處理腳本來啟動和重置Oracle數(shù)據(jù)庫
這篇文章主要介紹了Windows下編寫cmd腳本來對Oracle數(shù)據(jù)庫執(zhí)行啟動和重置的方法,只需在bat文件中保存cmd shell之后就可以雙擊使用,簡單粗暴,需要的朋友可以參考下2016-03-03
Oracle數(shù)據(jù)庫自定義類型type的用法詳解
這篇文章主要介紹了Oracle數(shù)據(jù)庫自定義類型type的用法詳解,Oracle?數(shù)據(jù)庫的概念和其它數(shù)據(jù)庫不一樣,這里的數(shù)據(jù)庫是一個操作系統(tǒng)只有一個庫,可以看作是?Oracle?就只有一個大數(shù)據(jù)庫,需要的朋友可以參考下2023-07-07
Oracle表結(jié)構(gòu)查詢之如何獲取列信息與注釋
本文主要介紹了Oracle數(shù)據(jù)庫中表結(jié)構(gòu)信息的基本知識,包括表名、列名、數(shù)據(jù)類型、數(shù)據(jù)長度、可空性、默認值以及字段注釋等,這些信息對于理解數(shù)據(jù)庫設計和維護非常重要,同時,提供了基本的查詢示例2024-10-10
plsql連接oracle數(shù)據(jù)庫報ora 12154錯誤解決方法
今天遇到一個問題,plsql連接oracle數(shù)據(jù)庫報ora 12154錯誤,本文將為您詳細介紹此等問題的解決方法2012-11-11
Oracle數(shù)據(jù)庫執(zhí)行計劃的查看與分析技巧
在 Oracle 數(shù)據(jù)庫中,執(zhí)行計劃能夠幫助我們深入了解 SQL 語句在數(shù)據(jù)庫內(nèi)部的執(zhí)行細節(jié),進而優(yōu)化查詢性能、提升系統(tǒng)效率,執(zhí)行計劃是 Oracle 數(shù)據(jù)庫優(yōu)化器為 SQL 語句生成的一種執(zhí)行藍圖,本文給大家介紹了Oracle數(shù)據(jù)庫執(zhí)行計劃的查看與分析技巧,需要的朋友可以參考下2024-12-12
oracle數(shù)據(jù)匹配merge into的實例詳解
這篇文章主要介紹了oracle數(shù)據(jù)匹配merge into的實例詳解的相關(guān)資料,希望通過本文能幫助到大家,需要的朋友可以參考下2017-10-10

