[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.당신은 오라클 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.이 같은 피벗 쿼리와 함께 할 수 있습니다 :
이 같은 피벗 쿼리와 함께 할 수 있습니다 :
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.
select * FROM doc_tab PIVOT ( Min(document_id) FOR document_type IN ('Voters ID','Pan card','Drivers licence') )
이 같은 출력
SQL 바이올린 데모 여기
from https://stackoverflow.com/questions/19858079/how-to-convert-rows-to-columns-in-oracle by cc-by-sa and MIT license
'SQL' 카테고리의 다른 글
[SQL] MySQL은, 사용자로 순위를 잡아 (0) | 2020.04.26 |
---|---|
[SQL] 치명적인 오류 : 널 (null)의 멤버 함수 쿼리에 전화 () (0) | 2020.04.26 |
[SQL] 왜 UDF 너무 느린 서브 쿼리보다? (0) | 2020.04.26 |
[SQL] SQL PIVOT 및 문자열 연결 집계 (0) | 2020.04.26 |
[SQL] MySQL은 # 1093 - 당신은 FROM 절에서 업데이트 대상 테이블 '경품'을 지정할 수 없습니다 (0) | 2020.04.26 |