亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Oracle使用pivot和unpivot函數(shù)實(shí)現(xiàn)行列轉(zhuǎn)換

 更新時(shí)間:2023年06月15日 09:20:13   作者:牛奶咖啡13  
項(xiàng)目開發(fā)過程中常常會涉及到oracle數(shù)據(jù)庫的一個(gè)數(shù)據(jù)操作,那就是行列的互轉(zhuǎn),本文為大家介紹了兩個(gè)可以實(shí)現(xiàn)這一操作的函數(shù)pivot和unpivot,感興趣的可以了解一下

一、需求說明 

項(xiàng)目開發(fā)過程中涉及到oracle數(shù)據(jù)庫的數(shù)據(jù)操作;但是需要將數(shù)據(jù)進(jìn)行列的互轉(zhuǎn),通過查閱資料可知在oracle中有三種方式可以實(shí)現(xiàn)行列互轉(zhuǎn):

①使用decode 函數(shù);

②使用case when 函數(shù);

③使用pivot函數(shù);

參考:Oracle中實(shí)現(xiàn)行列互轉(zhuǎn)的方法分享

二、實(shí)現(xiàn)方法

我這里有一個(gè)數(shù)據(jù)表內(nèi)容如下:

2.1、實(shí)現(xiàn)將上圖內(nèi)容轉(zhuǎn)為行——decode函數(shù)

select
  "name",
  max(decode("course", '語文', "score")) 語文,
  max(decode("course", '數(shù)學(xué)', "score")) 數(shù)學(xué),
  max(decode("course", '英語', "score")) 英語,
  sum("score") 總分
from "grade"
group by "name";

2.2、實(shí)現(xiàn)將上圖內(nèi)容轉(zhuǎn)為行——case when函數(shù)

select
  "name",
  max(case when "course"  = '語文' then "score" end) 語文,
  max(case when "course" = '數(shù)學(xué)' then "score" end) 數(shù)學(xué),
  max(case when "course" = '英語' then "score" end) 英語,
  sum("score") 總分
from "grade"
  group by "name";

2.3、實(shí)現(xiàn)將上圖內(nèi)容轉(zhuǎn)為行——pivot函數(shù)

pivot函數(shù)的語法:

pivot(聚合函數(shù) for 列名 in(類型))
 
select t.* from(
(select * from 原表名稱) 
pivot(
    max(需轉(zhuǎn)的列名稱) 
    for 需轉(zhuǎn)的列名稱 in(需轉(zhuǎn)列對應(yīng)的值1,需轉(zhuǎn)列對應(yīng)的值2,需轉(zhuǎn)列對應(yīng)的值3
     )
)t

SELECT t.*,(t.語文+t.數(shù)學(xué)+t.英語)總分 from ((SELECT "name","course","score" from "grade")pivot
(
	 max("score") 
	 for "course" in('語文' 語文,'數(shù)學(xué)' 數(shù)學(xué),'英語' 英語)
))t ORDER BY "name";

2.4、實(shí)現(xiàn)將上圖內(nèi)容轉(zhuǎn)為列——unpivot函數(shù)

需要轉(zhuǎn)的內(nèi)容如下圖:

unpivot函數(shù)的語法:

SELECT 列名稱,需定義的列1名稱,需定義的列2名稱 from 表名稱 unpivot (需定義的列2名稱 for 需定義的列1名稱 in(列2值1,列2值2,列2值3));

SELECT "name" 名字,course 課程,score 分?jǐn)?shù) from "grade2" unpivot (score for course in("chinese","math","english"));

SELECT 名字,course 課程,score 分?jǐn)?shù) from (
SELECT "name" 名字,"chinese" 語文,"math" 數(shù)學(xué),"english" 英語 from "grade2") unpivot (score for course in(語文,數(shù)學(xué),英語))

到此這篇關(guān)于Oracle使用pivot和unpivot函數(shù)實(shí)現(xiàn)行列轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Oracle行列轉(zhuǎn)換內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論