순차적으로 번호 부여하는 데 조건이 몇개 있는데 어떤식으로 해야될까요... 1 5 807

by lgxj [SQL Query] [2021.12.01 13:13:52]



 

아래 첨부한거 처럼 처음에는 순번이 자동 부여하고 이후 사용자가 수정하고 재지정 했을때 정확한 순번으로 다시 지정 될수 있도록 하려는데 어떤식으로 해야 될까요?

by pajama [2021.12.01 13:28:48]

dense_rank 함수 사용하시면 될것같네요.

select dense_rank() over (order by 순번) from t;


by 마농 [2021.12.01 13:35:29]

테이블에 PK 는 따로 있는지?
DB 는 뭔지?


by lgxj [2021.12.01 13:44:23]

아 디비는 오라클이고요

그냥 따로 pk는 없고 순번만 새로 채번해주면 되는거라서요.

문제는 3번까지는 잘 하겠습니다.

4번(사용자 설정을 저런식으로 변경했을때) 5번 처럼 나와야 되는 부분이 잘안되고 있습니다.


by 마농 [2021.12.01 13:51:34]

PK 가 없는데 어떻게 사용자 지정 부분을 업데이트 하시나요?
레코드 단위로 업데이트 하려면 PK 가 있어야 합니다.
PK 가 없다면 후보키가 있는지 확인해야 하고, 후보키마저 없다면? ROWID 를 이용해야 합니다.


by 마농 [2021.12.01 13:49:36]
MERGE INTO t a
USING (SELECT *
         FROM (SELECT ROWID rid
                    , seq
                    , DENSE_RANK() OVER(ORDER BY seq) new_seq
                 FROM t
               )
        WHERE seq != new_seq
       ) b
ON (a.ROWID = b.rid)
WHEN MATCHED THEN
UPDATE SET seq = b.new_seq
;

 

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