在Oracle資料庫中,行轉列是一個常見的資料處理需求。它將行中的多個值轉換為一列中的多個值,從而更好地展示和分析資料。
例如,假設我們有以下表格:
ID | Name | Score1 | # Score2 | Score3 |
---|---|---|---|---|
1 | John | 80 | 70 | 90 |
2 | Lily | #90 | #85 | #95 |
3 | Tom | 60 | 75 | 80 |
Name | Subject | Score | |
---|---|---|---|
##John | Score1 | 80 | |
John | #Score2 | 70 | |
John | Score3 | 90 | |
Lily | Score1 | 90 | |
Lily | Score2 | 85 | |
#2 | Lily | Score3 | 95 |
3 | #Tom | Score1 | 60 |
3 | #Tom | Score2 | 75 |
3 | Tom | Score3 | 80 |
在Oracle中,有幾種方法可以實作行轉列,包括使用UNPIVOT和UNION ALL。接下來,我們將詳細介紹每種方法的步驟和語法。
使用UNPIVOT實作行轉列
UNPIVOT是Oracle SQL中的一個關鍵字,可以將列移到行中。使用UNPIVOT查詢可以將多列轉換為多行。使用UNPIVOT首先需要確保表中的每一行都有相同的列數和相同的資料類型。
以下是使用UNPIVOT實作行轉列的步驟:
步驟1:建立範例表格
首先,我們需要建立範例表格以準備好資料。
CREATE TABLE score ( ID INT, Name VARCHAR2(20), Score1 INT, Score2 INT, Score3 INT ); INSERT INTO score VALUES (1, 'John', 80, 70, 90); INSERT INTO score VALUES (2, 'Lily', 90, 85, 95); INSERT INTO score VALUES (3, 'Tom', 60, 75, 80); COMMIT;
步驟2:執行UNPIVOT查詢
#然後,我們可以使用以下UNPIVOT查詢轉換資料:
SELECT ID, Name, Subject, Score FROM score UNPIVOT ( Score FOR Subject IN (Score1, Score2, Score3) );
執行結果如下:
#ID | Name | Subject | Score |
---|---|---|---|
1 | |||
Score1 | 80 | #1 | |
Score2 | 70 | 1 | |
Score3 | 90 | ##2 | |
Score1 | 90 | #2 | |
Score2 | 85 | 2 | |
#Score3 | #95 | ||
## 3 | Tom | Score1 |
##Tom
Score2
75
3
Tom
#Score3
80
步驟3:清除表格 | 最後,我們可以透過刪除表格來清除資料: | 使用UNION ALL實作行轉列 | UNION ALL也是Oracle SQL中用來行轉列的一種方法。使用UNION ALL查詢可以將列轉換為行。以下是使用UNION ALL實作行轉列的步驟: |
---|---|---|---|
步驟2:執行UNION ALL查詢 | 然後,我們可以使用以下UNION ALL查詢轉換資料: | 運行結果如下: | |
ID | Name | ||
#Score | ##1 | ||
Score1 | 80 | #1 | |
#Score2 | 70 | 1 | |
#Score3 | 90 | ||
# 2 | Lily |
DROP TABLE score;
以上是oracle 行怎麼轉列的詳細內容。更多資訊請關注PHP中文網其他相關文章!