我不知道它的問題,但是,如果新的記錄都在用相同的source_loc
領域,要確保它們保存和繼承先前分配值fulfill_id
那麼這樣的事情可能會奏效,以確保以前的ID被繼承和新的ID分配:
update mytable t1
set t1.fulfill_id = (
with already as (
select distinct source_loc, fulfill_id
from mytable
where fulfill_id is not null
),
final_id as (
select distinct
m.source_loc,
coalesce (a.fulfill_id, dense_rank() over (order by m.source_loc)) as fulfill_id
from
mytable m,
already a
where
m.source_loc = a.source_loc (+)
)
select
f.fulfill_id
from final_id f
where
f.source_loc = t1.source_loc
)
where t1.fulfill_id is null;
以這種方式,一旦fulfill_id分配給source_loc,它的保留。
ORDER_NO FULFILL_ID SOURCE_LOC ITEM
100 1 11001 0021
100 1 11001 0031
100 2 12001 0014
100 3 13001 0053
100 12001 0014
100 10001 0014
最終會是這樣:即開始這樣的數據
ORDER_NO FULFILL_ID SOURCE_LOC ITEM
100 1 11001 0021
100 1 11001 0031
100 2 12001 0014
100 3 13001 0053
100 2 12001 0014
100 4 10001 0014
你想存儲在表FULFILL_ID價值?這有點危險,這就是當一行被插入/更新/刪除時,數據不一致的原因。改爲創建一個視圖。 (或使用觸發器。) – jarlh