2014-03-19 36 views
1

我需要重新排序數字的幫助,如下面的示例中所述。Sql更新查詢重新計算數字序列

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
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。