Oracle之pivot函数

测试数据:

CREATE 
    TABLE T 
    ( 
        OWNER VARCHAR2(30), 
        OBJECT_TYPE VARCHAR2(100), 
        VALUE NUMBER 
    );


insert into t  select object_name,object_type,object_id from user_objects ;

commit;

解释:  

实现:

SELECT * FROM T;

SELECT OBJECT_TYPE,SUM(VALUE) FROM T GROUP BY T.OBJECT_TYPE ,T.OWNER;

--开始行列转换

单列转换:
SELECT * FROM T PIVOT 
(SUM(VALUE) as total
FOR OBJECT_TYPE
IN('TABLE'));

多列转换:

SELECT * FROM T PIVOT 
(SUM(VALUE) as total,
AVG(VALUE) AS AV
FOR OBJECT_TYPE
IN('TABLE','VIEW'));


再来一组测试:

SELECT *
  FROM (SELECT deptno, job, sal FROM scott.emp)
PIVOT (SUM (sal) --<-- pivot_clause
                     FOR JOB --<-- pivot_for_clause
                     IN ('SALESMAN', 'MANAGER', 'PRESIDENT') --<-- pivot_in_clause
                );


select deptno,job,sum(sal) from emp

group by deptno,job


总结:计算原理group by 聚合函数计算列以外的其他列。

for纵向展示(作为字段),聚合计算和for以外的其他列 垂直展示


版权声明:本文为qq_33879355原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。