오라클에서 n개 행의 레코드를 1개 열의 데이타로 조회하기
1. 테이블내 원 데이타 및 추출목표 결과
(1) 원 데이타
ID | 이름 |
성별 |
1 | 황상규 |
남 |
2 | 차림표 |
남 |
3 | 장동건 |
남 |
4 | 전지현 |
여 |
5 | 황정민 | 남 |
6 | 한효주 | 여 |
7 | 조승우 | 남 |
8 | 이요원 | 여 |
(2) 추출목표
성별 |
명단 |
남자 |
황상규, 차림표, 장동건, 황정민, 조승우 |
여자 |
전지현, 한효주, 이요원 |
2. 구현
(1) 샘플용 테이블 생성
컬럼명 | 타입 | 길이 | Nullable | CONSTRAINT |
ID | NUMBER | 3 | NOT NULL | PRIMARY KEY |
NAME | VARCHAR2 | 20 | NOT NULL | |
GENDER | CHAR | 2 |
- [긁어다 사용하는 샘플]
CREATE TABLE T_PERSON( ID NUMBER(3) NOT NULL, NAME VARCHAR2(20) NOT NULL, GENDER CHAR(2), CONSTRAINT T_PERSON_PK PRIMARY KEY(ID) ) |
3. 샘플 데이타 입력
INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (1, '황상규', '남'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (2, '차림표', '남'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (3, '장동건', '남'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (4, '전지현', '여'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (5, '황정민', '남'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (6, '한효주', '여'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (7, '조승우', '남'); INSERT INTO T_PERSON(ID, NAME, GENDER) VALUES (8, '이요원', '여'); |
4. 추출 목표 SQL 실행
[긁어서 사용하는 샘플]
SELECT GENDER, SUBSTR(MAX(SYS_CONNECT_BY_PATH (NAME,',')),2) AS LIST FROM ( SELECT ROW_NUMBER() OVER(PARTITION BY GENDER ORDER BY ID) AS NUM, GENDER, NAME FROM T_PERSON ) START WITH NUM=1 CONNECT BY PRIOR NUM=NUM-1 AND PRIOR GENDER=GENDER GROUP BY GENDER; |
5. 추출 결과
GENDER |
LIST |
남 |
황상규,차림표,장동건,황정민,조승우 |
여 | 전지현,한효주,이요원 |
- Toad for Oracle에서 샘플 SQL 실행 결과