[오라클|Oracle] PARTITION BY


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

 친가

 삼촌

 

 이렇게 조회가 됩니다.

 

 

Posted by 쭈니루
TAG

댓글을 달아 주세요

  1. whwo213

    항상 유용하게 참고하고 있습니다 ^^

    2016.03.09 09:42 [ ADDR : EDIT/ DEL : REPLY ]