순서 컬럼 값을 다시 정렬하려면 어떻게 해야할까요? 0 5 1,949

by 아리수 [SQL Query] [2018.08.30 21:09:14]


"순서" 컬럼에 값이 1 ~ 100 까지 들어 있습니다.

여기서 DELETE 등으로 1, 3, 4, 7, 8, 30, ...  등 불특정하게 30개의 순서 정보를 삭제하였습니다.

삭제한 후  "순서" 컬럼의 정보를 1 ~ 70 으로 다시 계산하여 변경하고 싶습니다.

순서(변경전) 순서 (삭제 후) 결과
1 삭제  
2 삭제  
3 3 1
4 4 2
5 삭제  
6 6 3
7 삭제  
8 8 4
9 9 5

어떻게 쿼리를 구성하여야할까요?

결과 부분처럼 순서(삭제 후) 항목의 남아 있는 수를 다시 순차적으로 변경하고 싶습니다.

by 야신 [2018.08.30 21:24:19]

Select seq  as origin_seq

,Row_number() over (order by seq) as conv_seq

From .테이블


by 아리수 [2018.08.30 21:28:57]

답변 감사드립니다.

결과 부분처럼 순서(삭제 후) 항목의 남아 있는 수를 다시 순차적으로 변경하고 싶습니다.


by 야신 [2018.08.30 22:32:36]

1. 새로운 순서컬럼까지 포함한 백업테이블을 만들어 데이타를 insert 하고

기존 테이블 데이타 삭제 후 백업 테이블에서 데이타를 select 하여 insert 함.

 

2. MERGE 

MERGE INTO 테이블 a
USING (SELECT ROWID AS row_id
             ,row_number() over(ORDER BY seq) AS new_seq
       FROM   테이블) b
ON (a.rowid = b.row_id)
WHEN MATCHED THEN
  UPDATE SET a.seq = b.new_seq;


by 마농 [2018.08.31 07:50:05]

순서라는게 정렬을 위한 항목이나 식별하기 위한 항목인데
이게 반드시 빈 수가 없어야 하는건 아닙니다.
숫자가 비더라도 정렬이나 식별엔 아무런 문제가 없습니다.
비어 있지 않은 일련번호는 row_number 로 얼마든지 뽑을 수 있습니다.
굳이 UPDATE 하는 것은 상당한 비효율이 있습니다.


by 아리수 [2018.08.31 09:53:49]

답변감사합니다.

네. 비효율적인 부분이 있는데 이것에 목숨(?) 거는 사람이 있어서 말입니다. ^^;.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입