Oracle中的Pivot操作是一種非常有用的數據透視表技術。它可以將普通的表轉換為更具可讀性和概觀性的形式,使用戶可以更輕松地理解和分析數據。通過Pivot操作,用戶可以將行轉換為列,列轉換為行,實現數據的交叉統計和聚合。以下是一些關于Oracle Pivot操作的詳細介紹和示例。
語法
SELECT <非聚合項1>, <非聚合項2>, …, PIVOT ( <聚合函數>(<聚合項>) FOR <列項> IN (<列項值1>, <列項值2>, …) ) FROM <表名>
示例1:行轉列
-- 原始表 CREATE TABLE EMP_SALARY( EMP_NO NUMBER(10), YEAR NUMBER(4), MONTH NUMBER(2), SALARY NUMBER(10,2) ); -- 插入數據 INSERT INTO EMP_SALARY (EMP_NO, YEAR, MONTH, SALARY) VALUES (1001, 2020, 1, 5000); INSERT INTO EMP_SALARY (EMP_NO, YEAR, MONTH, SALARY) VALUES (1001, 2020, 2, 5500); INSERT INTO EMP_SALARY (EMP_NO, YEAR, MONTH, SALARY) VALUES (1002, 2020, 1, 6000); INSERT INTO EMP_SALARY (EMP_NO, YEAR, MONTH, SALARY) VALUES (1002, 2020, 2, 6500); -- Pivot查詢 SELECT * FROM EMP_SALARY PIVOT ( SUM(SALARY) FOR MONTH IN (1,2) );結果:
EMP_NO YEAR 1_SALARY 2_SALARY 1001 2020 5000 5500 1002 2020 6000 6500這個示例展示了如何將行轉換為列。原始表包含基本的工資信息:員工號,年份,月份和薪水。通過Pivot操作,我們可以將月份列轉換為對應的數據列(1和2),獲得更易讀、概觀的數據集。
示例2:列轉行
-- 原始表 CREATE TABLE SALES_DATA( YEAR NUMBER(4), REGION VARCHAR2(20), JAM NUMBER(10,2), BREAD NUMBER(10,2), BUTTER NUMBER(10,2) ); -- 插入數據 INSERT INTO SALES_DATA (YEAR, REGION, JAM, BREAD, BUTTER) VALUES (2020, 'North', 10000, 8000, 5000); INSERT INTO SALES_DATA (YEAR, REGION, JAM, BREAD, BUTTER) VALUES (2020, 'South', 12000, 9000, 6000); -- Unpivot查詢 SELECT * FROM SALES_DATA UNPIVOT ( SALES FOR PRODUCT IN (JAM AS 'Jam', BREAD AS 'Bread', BUTTER AS 'Butter') );結果:
YEAR REGION PRODUCT SALES 2020 North Jam 10000 2020 North Bread 8000 2020 North Butter 5000 2020 South Jam 12000 2020 South Bread 9000 2020 South Butter 6000這個示例展示了如何將列轉換為行。原始表包含銷售數據,對應不同的產品和銷售地區。通過Unpivot操作,我們可以將產品列和對應的銷售數據列轉換為一列,提取出銷售數據的所有維度,以便更詳細地分析和比較銷售數據。
總結
Pivot和Unpivot操作是Oracle SQL中非常重要且常用的技術。它可以為我們提供更多的分析數據的方式,讓我們能夠更優秀的完成數據分析工作。它可以讓用戶的分析工作更快捷,方便,且易于理解。希望讀者們可以根據自己的需要,更好的來使用Pivot和Unpivot操作。