更新查询以更新列ORDER_NUM相同表中的排序顺序号,按日期排序每个FK_ID

时间:2014-03-20 11:54:59

标签: oracle11g sql-update

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

1 个答案:

答案 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是一个可怕的名字,我希望它不是真正的一个