我有一张表格,其中每个订单的行数量越来越多。 因此,我没有:每盒数量:
我找到了一种使用以下公式计算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
答案 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)
是您的唯一密钥,并且分配的box
是order_no
中的一个上升序列。如果您的实际规则不同,则需要修改window子句。
答案 1 :(得分:2)
是的,您需要lag()
函数,该函数会查找上一行:
select order_, box, qty,
qty - nvl(lag(qty) over (partition by order_ order by box), 0)
from tbl