오라클에서 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 실행 결과


Posted by 우라질레이터

urajilation@gmail.com
우라질레이터

달력

태그목록