Table1 ============================= FK_ID DATE NAME ORDER_NUM 1 D1 N1 NULL 1 D2 N2 NULL 1 D3 N3 NULL 1 D4 N4 NULL 2 D5 N7 NULL 2 D2 N8 NULL 2 D3 N9 NULL
结果
Table1 ============================= FK_ID DATE NAME ORDER_NUM 1 D1 N1 1 1 D2 N2 2 1 D3 N3 3 1 D4 N4 4 2 D1 N7 1 2 D2 N8 2 2 D3 N9 3
我想在oracle中编写一个更新查询,它会更新同一个表列中的排序顺序号,称为ORDER_NUM,按日期排序每个FK_ID
答案 0 :(得分:0)
merge into table1
using (
select rowid as rid,
row_number() over (partition by fk_id order by date) as rn
from table1
) t on (t.rid = table1.rowid)
when matched then update
set order_num = rn;
我使用rowid
作为“PK替换”,因为您的示例不包含似乎是该表的主键的列。
顺便说一下:date
是一个可怕的名字,我希望它不是真正的一个