Oracle中依赖于订单的多行更新

时间:2015-07-18 04:43:11

标签: sql oracle sql-update

我需要根据输入值

更新行

示例:在我的表数据中

 **LOTNUMBER QUANTITY** 
    0000001      30
    0000002      30
    0000003      20
    0000004      20
    0000005      10

输入值 -20 然后

我需要获取最新的批号并更新批号0000005 to 00000004 to 10

然后输出

**LOTNUMBER  QUANTITY**
    0000001      30
    0000002      30
    0000003      20
    0000004      10
    0000005      0

先谢谢。

1 个答案:

答案 0 :(得分:1)

您可以组合窗口函数,CTE和相关更新来实现这一点,它很丑陋且可能非常低效。我不是Oracle专家。

update data u set quantity=( 
  with d as 
     ( 
     select lotnumber as l ,  greatest(0,quantity - greatest (0,
     20
     + quantity - sum(quantity) over (order by lotnumber desc))) as v 
     from data
     )  
  select v from d where u.lotnumber=d.l 
);

那" 20"中间是你的输入值

在这里摆弄:http://sqlfiddle.com/#!4/cce2a