Sql更新查询以重新计算数字序列

时间:2014-03-19 14:15:44

标签: sql oracle

我需要帮助重新排序数字,如下例所示。

ID  NAME  SEQ_NUM
---|-----|---------
1    N1     1
2    N1     2
3    N1     3
4    N2     1
5    N2     2
6    N3     1

现在让我们说如果我执行少量删除和更新,如下所示

ID  NAME  SEQ_NUM
---|------|-------
1    N1     1
3    N1     4    
4    N2     2
5    N2     3
6    N3     6

现在我正在尝试编写单个更新查询来更新上表,如下所示。

ID  NAME  SEQ_NUM
---|------|--------
1    N1     1
3    N1     2    
4    N2     1
5    N2     2    
6    N3     1

1 个答案:

答案 0 :(得分:1)

merge into the_table
using
(
    select id, 
           name, 
           row_number() over (partition by name order by seq_num) as new_seq_num
    from the_table
) t on (t.id = the_table.id)
when matched then update
   set seq_num = t.new_seq_num;

这假设ID实际上是表格的PK。