oracle縱表怎么轉橫表

oracle中,可以利用unpivot()函數將縱表轉為橫表,該函數用于將把一行當中的列的字段按照行的唯一值轉換成多行數據,語法為“select 字段 from 數據集 unpivot(列的值 for 自定義列名 in(列名))”。

oracle縱表怎么轉橫表

本教程操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。

oracle縱表怎么轉橫表

Oracle列轉行就是把一行當中的列的字段按照行的唯一值轉換成多行數據。?

學生成績表的基礎數據是一個學生的一個科目成績對應著是一條記錄。然后我們進行了行轉列后變成一個學生對應著每列(數學、英語、語文)科目的成績是一條記錄。那么本文就是要把之前轉換后的學生成績表(備份表score_copy)再次進行列轉行,轉換為原始數據。案例數據如下:

oracle縱表怎么轉橫表

oracle縱表怎么轉橫表

那我們要如何實現列轉行呢?下面介紹兩種常用的方法:

1、利用union all 進行拼接,可以完美的把對應的列轉為行記錄,具體代碼如下:

select?t.stuname,?'英語'?as?coursename?,t.英語?as?score??from?SCORE_COPY?t union?all select?t.stuname,?'數學'?as?coursename?,t.數學?as?score??from?SCORE_COPY?t union?all select?t.stuname,?'語文'?as?coursename?,t.語文?as?score??from?SCORE_COPY?t

結果如下:

oracle縱表怎么轉橫表

2、利用Oracle自帶的列轉行函數unpivot也可以完美解決該問題,具體語法結構如下:

select?字段?from?數據集 unpivot(自定義列名/*列的值*/?for?自定義列名?in(列名))

? ? 實現代碼如下:

select?stuname,?coursename?,score?from score_copy??t unpivot (score?for?coursename?in?(英語,數學,語文))

? ? 結果如下:

oracle縱表怎么轉橫表

推薦教程:《Oracle視頻教程

以上就是

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享