我可以比较同一张表中另一行的字段吗

时间:2019-02-15 11:31:59

标签: oracle compare running-total

我有一张表格,其中每个订单的行数量越来越多。 因此,我没有:每盒数量:

  • 数量框2 =数量框1+数量框2
  • 数量盒3 =数量盒2+数量盒3等...

我找到了一种使用以下公式计算Excel中每盒数量的方法:

= IF(Line2(Order)=Line1(Order) THEN (Line2(Qty)-Line1(Qty) ELSE Line2(Qty) 

但是我想知道是否可以在Oracle中做到这一点。

当前表:

SELECT ORDER, BOX, QTY
FROM TABLE

     ORDER        BOX        QTY
---------- ---------- ----------
     12345       4501         50
     12345       4502        100
     12345       4503        150
     12345       4504        200
     12345       4505        250
     12354       5401         40
     12354       5402        100
     12354       5403        160
     12354       5404        220
     12360       6001         20
     12360       6002         42
     12360       6003         62

预期结果:

     ORDER        BOX        QTY
---------- ---------- ----------
     12345       4501         50
     12345       4502         50
     12345       4503         50
     12345       4504         50
     12345       4505         50
     12354       5401         40
     12354       5402         60
     12354       5403         60
     12354       5404         60
     12360       6001         20
     12360       6002         22
     12360       6003         20

2 个答案:

答案 0 :(得分:2)

使用解析LAG()函数。

select order_no
       , box_no
       , qty
       , nvl(qty-lag(qty) over (partition by order_no order by box), qty) as box_qty
from orders
order by 1 , 2
/

这假设(order_no, box)是您的唯一密钥,并且分配的boxorder_no中的一个上升序列。如果您的实际规则不同,则需要修改window子句。

答案 1 :(得分:2)

是的,您需要lag()函数,该函数会查找上一行:

demo

select order_, box, qty, 
       qty - nvl(lag(qty) over (partition by order_ order by box), 0) 
  from tbl
相关问题