source

Oracle에서 행을 열로 변환하는 방법

lovecheck 2023. 7. 16. 13:39
반응형

Oracle에서 행을 열로 변환하는 방법

이 양식의 표가 있습니다(부분 보기일 뿐이며 표에는 100개 이상의 열이 있습니다).

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

대출번호 하나에 대해서는 세 가지 서류를 증거로 가지고 있습니다.이러한 세부 정보를 열로 변환하여 다음과 같은 모양으로 만듭니다.

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

어떻게 하는 거지?

Oracle 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;

출력:

대출_번호 유권자_IDPAN_카드 드라이버_라이센스------------- -------------------- -------------------- --------------------992452533663 XPD0355636 CHXPS5522D DL-0420110141769

오라클을 사용하여 동일한 작업을 수행할 수 있습니다.PIVOT조항, 11g에 도입됨:

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

두 솔루션을 모두 사용하는 SQL 미들 예제:

피벗에 대한 자세한 내용은 여기에서 읽어 보십시오: 팀 홀의 오라클 피벗

다음과 같은 쿼리를 사용하여 이 작업을 수행할 수 있습니다.

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 에 대한 데모가 있습니다.

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

outputs as this

enter image description here

여기 sql 피들 데모

언급URL : https://stackoverflow.com/questions/19858079/how-to-convert-rows-to-columns-in-oracle

반응형