淘先锋技术网

首页 1 2 3 4 5 6 7

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操作。