복붙노트

[SQL] 어떻게 오라클에서 열 행을 변환하는? [복제]

SQL

어떻게 오라클에서 열 행을 변환하는? [복제]

나는 (테이블 100 개 이상의 열이 포함이 단지 부분이다)이 형태의 테이블이 있습니다.

 LOAN NUMBER   DOCUMENT_TYPE                DOCUMENT_ID
 992452533663  Voters ID                    XPD0355636
 992452533663  Pan card                     CHXPS5522D
 992452533663  Drivers licence              DL-0420110141769

하나의 대출 번호, 나는 증거로 문서의 3 종류가 있습니다. 나는이 세부 열로 변환하여 다음과 같은 모양을 가지고 싶은 :

LOAN NUMBER     VOTERS_ID    PAN_CARD     DRIVERS LICENCE
992452533663    XPD0355636   CHXPS5522D   DL-0420110141769

어떻게 이것에 대해 이동?

해결법

  1. ==============================

    1.당신은 오라클 10g를 사용하는 경우 열로 행을 돌리 DECODE 기능을 사용할 수 있습니다 :

    당신은 오라클 10g를 사용하는 경우 열로 행을 돌리 DECODE 기능을 사용할 수 있습니다 :

    CREATE TABLE doc_tab (
      loan_number VARCHAR2(20),
      document_type VARCHAR2(20),
      document_id VARCHAR2(20)
    );
    
    INSERT INTO doc_tab VALUES('992452533663', 'Voters ID', 'XPD0355636');
    INSERT INTO doc_tab VALUES('992452533663', 'Pan card', 'CHXPS5522D');
    INSERT INTO doc_tab VALUES('992452533663', 'Drivers licence', 'DL-0420110141769');
    
    COMMIT;
    
    SELECT
        loan_number,
        MAX(DECODE(document_type, 'Voters ID', document_id)) AS voters_id,
        MAX(DECODE(document_type, 'Pan card', document_id)) AS pan_card,
        MAX(DECODE(document_type, 'Drivers licence', document_id)) AS drivers_licence
      FROM
        doc_tab
    GROUP BY loan_number
    ORDER BY loan_number;
    

    산출:

    LOAN_NUMBER   VOTERS_ID            PAN_CARD             DRIVERS_LICENCE    
    ------------- -------------------- -------------------- --------------------
    992452533663  XPD0355636           CHXPS5522D           DL-0420110141769     

    당신은 11g에 도입 된 동일한 사용하여 Oracle PIVOT 절을 달성 할 수 있습니다 :

    SELECT *
      FROM doc_tab
    PIVOT (
      MAX(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence')
    );
    

    두 솔루션 SQLFiddle 예 : SQLFiddle 예

    피벗에서 오라클 팀 홀 기준 : 자세한 내용은 여기를 선회에 대해 읽어보기

  2. ==============================

    2.이 같은 피벗 쿼리와 함께 할 수 있습니다 :

    이 같은 피벗 쿼리와 함께 할 수 있습니다 :

    select * from (
       select LOAN_NUMBER, DOCUMENT_TYPE, DOCUMENT_ID
       from my_table t
    )
    pivot 
    (
       MIN(DOCUMENT_ID)
       for DOCUMENT_TYPE in ('Voters ID','Pan card','Drivers licence')
    )
    

    여기 sqlfiddle.com의 데모입니다.

  3. ==============================

    3.

     select * FROM doc_tab
        PIVOT
        (
        Min(document_id)
        FOR document_type IN ('Voters ID','Pan card','Drivers licence')
        ) 
    

    이 같은 출력

    SQL 바이올린 데모 여기

  4. from https://stackoverflow.com/questions/19858079/how-to-convert-rows-to-columns-in-oracle by cc-by-sa and MIT license