2016-12-14 50 views
-1

我有一個下表PLSQL過程來填充根據以往的記錄數量值

- ITEM_NUMBER QTY_FROM QTY_TO 
- ABC   10 
- ABC   20 
- ABC   30 
- DEF   100 
- DEF   250 
- DEF   400 

我需要寫一個PLSQL過程將基於qty_from下一行的同一項目編號填入QTY_to列。 例如,如果項目編號爲ABCqty_from在第一行爲10,在下一行爲20 .... id期望過程查看第二行...並在第一行填充qty_from爲19(next_row_qty_from - 1) 。

+0

您的問題沒有明確,要檢查是否qty_from = 10和第2排qty_from = 20那麼第一排會是19? – Moudiz

回答

1
select ITEM_NUMBER, QTY_FROM, 
     lead(QTY_FROM, 1) over (partition by ITEM_NUMBER, order by QTY_FROM) - 1 as QTY_TO 
    from table; 

作爲lead函數的第三個參數,您可以添加默認值。這將用於沒有下一行給定ITEM_NUMBER,所以在行- ABC 30的情況下,如果你這樣做lead(QTY_FROM, 1, QTY_FROM)將會有29作爲QTY_TO,但你沒有定義你的問題中的邊界情況。

0

沒有手術的需要,只是簡單的更新:

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