Oracle累计函数

今天遇到一个客户的报表需求,在shipment的报表中要查看该shipment中的每个PO的采购数量,当前shipment的出货数量以及累计的所有出货数量。

要有累计的出货数,并且是要有顺序的累计出货数量,例如某个PO为A,出A相关的invoice有三张,如果也是三个shipment出货,三个invoice中该PO的出货数量分别为954、827、1305。打开shipment报表,会按invoice的时间(因为先开票才有出货单shipment)来计算已经累计的出货数量。

这边可以从INV_NO来取代INV DATE,因为INV NO后面接的实际上是日期时间,所以用INV_NO来排序是等效的。

数据如下:

这里主要用到的是SUM() OVER(ORDER BY)语法,即按INV NO升序去加总QTY

SELECT SQTY FROM (SELECT INV_NO,SUM(qty) over(ORDER BY INV_NO ASC) SQTY from TKINC
WHERE PART_NO='FLTS-T1603330' and color_no='095A' 
AND QTY<>0 and AND SIZE_NAME='FOC') WHERE INV_NO='INV20161214115254982'

结果如下:

SELECT SQTY FROM (SELECT INV_NO,SUM(qty) over(ORDER BY INV_NO ASC) SQTY from TKINC
WHERE PART_NO='FLTS-T1603330' and color_no='095A' 
AND QTY<>0 and AND SIZE_NAME='FOC') WHERE INV_NO='INV20161214115254982'

原文地址:https://www.cnblogs.com/milo-xie/p/6426706.html