반응형
SELECT 로 데이터를 가져 오면서 전체 또는 원하는 그룹단위로 일련번호를 부여 해야 할 때
ROW_NUMBER() 를 사용하면 쉽게 할 수 있다.
Table를 마이그레이션 할 때, 레거시 에서는 PK를 복잡하게 부여하였는데 새로운 시스템 에서는
일련번호로 단순화 한다거나 할 때 사용하면 유용 하다.
예를 들어 emp_code, request_ym 로 GROUP 하고 relation 으로 정렬하여 일련번호를 부여하고자 한다면
다음과 같이 할 수 있다.
만일 역순으로 일련번호를 부여 하고자 하면 ORDER BY relation DESC 처럼 하면 된다.
* ORDER BY 에 의해 동순 인 경우에도 ROW_NUMBER()는 1, 2, 3, ... 과 같이 하는데 만약 동순 일때 동일한 순위번호를
부여하고자 하면 ROW_NUMBER() 대신에 DENSE_RANK()를 사용하면 된다.
또한 DENSE_RANK()는 동순에 대하여 동일한 순위번호를 매기고 나서 그 다음 일련번호를 부여(즉, 1, 2, 2, 2, 3, 4, ...
ROW_NUMBER() 를 사용하면 쉽게 할 수 있다.
Table를 마이그레이션 할 때, 레거시 에서는 PK를 복잡하게 부여하였는데 새로운 시스템 에서는
일련번호로 단순화 한다거나 할 때 사용하면 유용 하다.
예를 들어 emp_code, request_ym 로 GROUP 하고 relation 으로 정렬하여 일련번호를 부여하고자 한다면
다음과 같이 할 수 있다.
ROW_NUMBER() OVER (PARTITION BY emp_code, request_ym ORDER BY relation) as seq_no |
만일 역순으로 일련번호를 부여 하고자 하면 ORDER BY relation DESC 처럼 하면 된다.
* ORDER BY 에 의해 동순 인 경우에도 ROW_NUMBER()는 1, 2, 3, ... 과 같이 하는데 만약 동순 일때 동일한 순위번호를
부여하고자 하면 ROW_NUMBER() 대신에 DENSE_RANK()를 사용하면 된다.
또한 DENSE_RANK()는 동순에 대하여 동일한 순위번호를 매기고 나서 그 다음 일련번호를 부여(즉, 1, 2, 2, 2, 3, 4, ...
와 같이) 하게 되는데, RANK() 함수를 사용하면 동일한 순위번호 갯수만큼 건너 띄고 다음 일련번호를 부여 하게
된다 (즉, 1, 2, 2, 2, 5, 6 ... 와 같이).
된다 (즉, 1, 2, 2, 2, 5, 6 ... 와 같이).
반응형
'데이터베이스' 카테고리의 다른 글
[SQL서버] 변수와 함께 EXECUTE 'tsql_string' 사용 (0) | 2011.11.29 |
---|---|
Oracle 제약조건 걸린 테이블 확인 (0) | 2011.11.02 |
SQL서버 2008 백업 (0) | 2011.08.25 |
SQL서버 2008에 Oracle을 Linked Server로 연결하기 (0) | 2011.08.25 |
Windows Server 2008 R2 에 Oracle 10g Client 설치 (0) | 2011.08.25 |