아래 첨부한거 처럼 처음에는 순번이 자동 부여하고 이후 사용자가 수정하고 재지정 했을때 정확한 순번으로 다시 지정 될수 있도록 하려는데 어떤식으로 해야 될까요?
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() 버튼을 클릭하여 작성 하시면 됩니다.