Oracle 基于先前记录值填充数量的PLSQL过程
我有一张桌子Oracle 基于先前记录值填充数量的PLSQL过程,oracle,stored-procedures,plsql,Oracle,Stored Procedures,Plsql,我有一张桌子 - ITEM_NUMBER QTY_FROM QTY_TO - ABC 10 - ABC 20 - ABC 30 - DEF 100 - DEF 250 - DEF 400 我需要编写一个plsql过程,该过程将基于同一物料编号下一行的QTY\u,将QTY\u填充到列。 例如,如果物料编号为ABC且第一行的数量为10,下一行的数量为20…我希望程序查
- ITEM_NUMBER QTY_FROM QTY_TO
- ABC 10
- ABC 20
- ABC 30
- DEF 100
- DEF 250
- DEF 400
我需要编写一个plsql过程,该过程将基于同一物料编号下一行的QTY\u,将QTY\u填充到
列。
例如,如果物料编号为ABC
且第一行的数量为10,下一行的数量为20…我希望程序查看第二行…并将第一行的数量填充为19(下一行数量从-1)
作为lead
函数的第三个参数,您可以添加默认值。当给定的项目编号不存在下一行时,将使用此选项,因此在行-ABC 30
的情况下,如果您执行引导(数量从,1,数量从)
将有29
作为数量到
,但您没有;t在您的问题中定义了边缘情况。无需程序,只需简单更新:
update t
set qty_to =
(select min(qty_from)-1 from t t2
where item_number = t.item_number and qty_from > t.qty_from)
结果:
SQL> select * from t order by item_number, qty_from;
ITEM_NUMBER QTY_FROM QTY_TO
----------- -------- -------
ABC 10 19
ABC 20 29
ABC 30
DEF 100 249
DEF 250 399
DEF 400
6 rows selected
您的问题不清楚,您想检查qty_from=10和第二行qty_from=20,那么第一行将是19?
SQL> select * from t order by item_number, qty_from;
ITEM_NUMBER QTY_FROM QTY_TO
----------- -------- -------
ABC 10 19
ABC 20 29
ABC 30
DEF 100 249
DEF 250 399
DEF 400
6 rows selected