Oracle數據庫中的UNPIVOT是一種用于將列轉換為行的SQL操作,它允許用戶將多個列的數據轉換為多行的形式,以便進行更靈活的數據分析和報表生成
UNPIVOT主要用于將寬表(多列)轉換為長表(多行),減少表的列數,增加行數
語法格式
SELECT pivot_column, value_column
FROM (SELECT column1, column2, column3, ... FROM table_name)
UNPIVOT (value_column FOR pivot_column IN (column1 AS alias1, column2 AS alias2, ...)
)
參數說明
value_column:存放原列值的新列名
pivot_column:存放原列名的新列名,是轉換后行數據中列標題(即原列名)所在的列的名稱
IN子句中列出了需要被轉換的列,以及它們轉換后的別名(可選)
示例
假設我們有一個名為sale_data的表,其結構如下:
product_id | jan_sales | feb_sales | mar_sales |
1 | 1000 | 1500 | 2000 |
2 | 800 | 1200 | 1800 |
我們想要將這些銷售數據轉換為多行的形式,以便進行更方便的數據分析,可以使用UNPIVOT來實現這一轉換,具體的SQL語句如下:
SELECT product_id, month, sales
FROM (SELECT product_id, jan_sales, feb_sales, mar_sales FROM sale_data)
UNPIVOT (sales FOR month IN (jan_sales AS 'January', feb_sales AS 'February', mar_sales AS 'March'))
執行上述SQL語句后,將得到以下結果:
product_id | month | sales |
1 | January | 1000 |
1 | Febuary | 1500 |
1 | March | 2000 |
2 | January | 800 |
2 | Febuary | 1200 |
2 | March | 1800 |
提示Tips
①?源表數據列的數據類型需要保持一致,否則可能會出現轉換失敗的情況