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

使用 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.csdn.net/software_kid/article/details/49487773

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值