测试数据:
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以外的其他列 垂直展示