반응형
SELECT '가족' A, '아버지' B FROM DUAL
UNION
SELECT '가족' A, '어머니' B FROM DUAL
UNION
SELECT '가족' A, '형' B FROM DUAL
UNION
SELECT '가족' A, '누나' B FROM DUAL
UNION
SELECT '친가' A, '삼촌' B FROM DUAL
UNION
SELECT '친가' A, '고모' B FROM DUAL
UNION
SELECT '외가' A, '외삼촌' B FROM DUAL
UNION
SELECT '외가' A, '이모' B FROM DUAL
ORDER BY B;
A | B | |
1 | 가족 | 누나 |
2 | 가족 | 아버지 |
3 | 가족 | 어머니 |
4 | 가족 | 형 |
5 | 외가 | 외삼촌 |
6 | 외가 | 이모 |
7 | 친가 | 고모 |
8 | 친가 | 삼촌 |
라는 테이블이 있습니다. 이 테이블에 ROWNUM을 부여하고 싶습니다.
일반적으론 아래와 같이 하실 겁니다.
SELECT ROWNUM, A, B FROM ( SELECT '가족' A, '아버지' B FROM DUAL UNION SELECT '가족' A, '어머니' B FROM DUAL UNION SELECT '가족' A, '형' B FROM DUAL UNION SELECT '가족' A, '누나' B FROM DUAL UNION SELECT '친가' A, '삼촌' B FROM DUAL UNION SELECT '친가' A, '고모' B FROM DUAL UNION SELECT '외가' A, '외삼촌' B FROM DUAL UNION SELECT '외가' A, '이모' B FROM DUAL ORDER BY A, B) |
ROWNUM | A | B | |
1 | 1 | 가족 | 누나 |
2 | 2 | 가족 | 아버지 |
3 | 3 | 가족 | 어머니 |
4 | 4 | 가족 | 형 |
5 | 5 | 외가 | 외삼촌 |
6 | 6 | 외가 | 이모 |
7 | 7 | 친가 | 고모 |
8 | 8 | 친가 | 삼촌 |
하지만, 우리가 원하는 것은 A 컬럼의 Group 별로 ROWNUM을 주고 싶은 겁니다.
SELECT ROW_NUMBER() OVER(PARTITION BY A ORDER BY A, B) RNUM, A, B FROM ( SELECT '가족' A, '아버지' B FROM DUAL UNION SELECT '가족' A, '어머니' B FROM DUAL UNION SELECT '가족' A, '형' B FROM DUAL UNION SELECT '가족' A, '누나' B FROM DUAL UNION SELECT '친가' A, '삼촌' B FROM DUAL UNION SELECT '친가' A, '고모' B FROM DUAL UNION SELECT '외가' A, '외삼촌' B FROM DUAL UNION SELECT '외가' A, '이모' B FROM DUAL ORDER BY A, B) |
RNUM | A | B | |
1 | 1 | 가족 | 누나 |
2 | 2 | 가족 | 아버지 |
3 | 3 | 가족 | 어머니 |
4 | 4 | 가족 | 형 |
5 | 1 | 외가 | 외삼촌 |
6 | 2 | 외가 | 이모 |
7 | 1 | 친가 | 고모 |
8 | 2 | 친가 | 삼촌 |
이렇게 조회가 됩니다.
반응형
'IT 개발' 카테고리의 다른 글
[C#] Component One (C1) FlexGrid 원하는대로 (맘대로) Cell Merge (셀 합치기) 하기 (0) | 2014.09.11 |
---|---|
[오라클|Oracle] 시간타입 소수점까지 제어하기 - TO_TIMESTAMP (0) | 2014.08.30 |
[오라클|Oracle] 위(이전)/아래(이후) Row의 값 가져오기 - LAG, LEAD (0) | 2014.07.16 |
[오라클|Oracle] 여러 개의 테이블을 하나처럼 만들기 - UNION / UNION ALL (0) | 2014.07.12 |
Oracle to MSSQL 쿼리 변환 시 검토할 점 (1) | 2014.07.11 |