그룹별 같은 rownum 부여하기 0 1 484

by 초보자 [Oracle 기초] [2021.07.06 21:43:51]


 cstmId |   loginId  | name
---------------------------------
  101     |  P101    |   kim
  101     |  kim1dk |   kim
  102     |  P102    |   choi
  103     |  P103    |    lee
  104     |  P104    |    lee
  104     |  jalee4   |    lee

위와 같은 데이터가 있을때 rownum 컬럼을 추가해서 같은 cstmId이면 같은 rownum을 부여하고 싶습니다.

 cstmId |   loginId  | name | rowNum
------------------------------------------------
  101     |  P101    |   kim   |  1
  101     |  kim1dk |   kim   |  1
  102     |  P102    |   choi  |  2
  103     |  P103    |    lee   |  3
  104     |  P104    |    lee   |  4
  104     |  jalee4   |    lee   |  4

그룹별 순서 메기기는 아는데 그룹당 같은 번호를 메기는것은 생각해봤는데 잘 떠오르지 않네요..

by pajama [2021.07.06 21:54:47]

dense_rank를 쓰시면 됩니다.

with t (cstmid, loginid, name) as (
select 101, 'P101', 'kim' from dual union all
select 101, 'kim1dk', 'kim' from dual union all
select 102, 'P102', 'choi' from dual union all
select 103, 'P103', 'lee' from dual union all
select 104, 'P104', 'lee' from dual union all
select 104, 'jalee4', 'lee' from dual
)
select cstmid, loginid, name, dense_rank() over (order by cstmid) rn from t

 

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