Oracle数据库SQL复杂查询、数据处理(五、PIVOT函数行列转换)

博客介绍了SQL中PIVOT和UNPIVOT的使用。PIVOT可将列的唯一值转换为多列,轮替表值表达式,还会在需要时对剩余列值执行聚合。文中给出案例及执行结果,并提供了PIVOT详细用法的链接。

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

使用 PIVOT 和 UNPIVOT

PIVOT 通过将表达式中的一个列的唯一值转换为输出中的多列,来轮替表值表达式。 PIVOT 在需要对最终输出所需的所有剩余列值执行聚合时运行聚合。

案例:

SELECT FACTORYDATE AS DATE_TIME,
        FACTORYNAME,
        PRODUCTIONTYPE,
        SUM (SHIPMAINQTY) - SUM (UNSHIPMAINQTY) SHIPMAINQTY
FROM FPS_PRDPROD_DAY
WHERE FACTORYDATE BETWEEN '20190701' AND '20190711'
AND PRODUCTIONTYPE IN ('P','E')
AND FACTORYNAME = 'ARRAY'  
GROUP BY FACTORYDATE,FACTORYNAME,PRODUCTIONTYPE
ORDER BY FACTORYDATE ASC

执行结果:

在这里插入图片描述


使用PIVOT函数后:

SELECT DATE_TIME,
       FACTORYNAME,
       NVL(P_QTY,0) AS P_QTY,
       NVL(E_QTY,0) AS E_QTY
FROM 
(
SELECT FACTORYDATE AS DATE_TIME,
        FACTORYNAME,
        PRODUCTIONTYPE,
        SUM (SHIPMAINQTY) - SUM (UNSHIPMAINQTY) SHIPMAINQTY
FROM FPS_PRDPROD_DAY
WHERE FACTORYDATE BETWEEN '20190701' AND '20190711'
AND PRODUCTIONTYPE IN ('P','E')
AND FACTORYNAME = 'ARRAY'  
GROUP BY FACTORYDATE,FACTORYNAME,PRODUCTIONTYPE
ORDER BY FACTORYDATE ASC
)
PIVOT (SUM(SHIPMAINQTY) FOR PRODUCTIONTYPE IN ('P' P_QTY,'E' E_QTY))

执行结果:
在这里插入图片描述

详细用法:
https://blog.youkuaiyun.com/software_kid/article/details/49487773

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值