Oracle之pivot函数

本文介绍使用SQL进行数据转换的方法,包括单列和多列的行列转换,并演示了如何利用GROUP BY结合聚合函数实现数据汇总。通过具体的SQL语句示例,帮助读者理解和掌握这些实用技能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

测试数据:

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以外的其他列 垂直展示

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值