Wie konvertiert man Zeilen zu Spalten in Oracle?

Ich habe eine Tabelle in dieser Form (das ist nur die Teilansicht, die Tabelle enthält mehr als 100 Spalten).

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

Für eine einzelne Darlehensnummer habe ich drei Arten von Dokumenten als Beweis. Ich möchte, dass diese Details in Spalten umgewandelt werden und folgende Form annehmen:

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

Wie geht das?

Solutions Collecting From Web of "Wie konvertiert man Zeilen zu Spalten in Oracle?"

Wenn Sie Oracle 10g verwenden, können Sie die Zeilen mithilfe der DECODE function in Spalten schwenken:

 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; 

Ausgabe:

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

Das gleiche erreichen Sie mit der Oracle PIVOT Klausel, die in 11g eingeführt wurde:

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

SQLFiddle-Beispiel mit beiden Lösungen: SQLFiddle-Beispiel

Lesen Sie hier mehr über Pivoting: Pivot In Oracle von Tim Hall

Sie können dies mit einer pivot Abfrage wie pivot tun:

 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') ) 

Hier ist eine Demo auf sqlfiddle.com .

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

outputs as this

Bildbeschreibung hier eingeben

sql Geige Demo hier