2014-03-19 2 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에 있다고 가정합니다.