Oracle使用pivot和unpivot函數(shù)實(shí)現(xiàn)行列轉(zhuǎn)換
項(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)容如下:
pivot函數(shù)的語法:
pivot(聚合函數(shù) for 列名 in(類型)) select t.* from((select * from 原表名稱) pivot( max(需轉(zhuǎn)的列名稱) for 需轉(zhuǎn)的列名稱 in(需轉(zhuǎn)列對(duì)應(yīng)的值1,需轉(zhuǎn)列對(duì)應(yīng)的值2,需轉(zhuǎn)列對(duì)應(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';需要轉(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'));到此這篇關(guān)于Oracle使用pivot和unpivot函數(shù)實(shí)現(xiàn)行列轉(zhuǎn)換的文章就介紹到這了,更多相關(guān)Oracle行列轉(zhuǎn)換內(nèi)容請(qǐng)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
