在oracle中,可以利用unpivot()函數將縱表轉為橫表,該函數用於將把一行當中的列的字段按照行的唯一值轉換成多行數據,語法為“ select 欄位from 資料集unpivot(列的值for 自訂列名in(列名))」。
本教學操作環境:Windows10系統、Oracle 11g版、Dell G3電腦。
Oracle列轉行就是把一行當中的列的欄位依照行的唯一值轉換成多行資料。
學生成績表的基礎資料是學生的一個科目成績對應著是一筆記錄。然後我們進行了行轉列後變成一個學生對應著每列(數學、英語、語文)科目的成績是一筆記錄。那麼本文就是要把之前轉換後的學生成績表(備份表score_copy)再次進行列轉行,轉換為原始資料。案例資料如下:
那我們要如何實作列轉行呢?以下介紹兩種常用的方法:
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
結果如下:
2、利用Oracle自帶的列轉行函數unpivot也可以完美解決此問題,具體語法結構如下:
select 字段 from 数据集 unpivot(自定义列名/*列的值*/ for 自定义列名 in(列名))
實作程式碼如下:
select stuname, coursename ,score from score_copy t unpivot (score for coursename in (英语,数学,语文))
結果如下:
推薦教學:《Oracle影片教學》
以上是oracle縱表怎麼轉橫表的詳細內容。更多資訊請關注PHP中文網其他相關文章!