How to convert Rows to Columns in Oracle? [duplicate] How to convert Rows to Columns in Oracle? [duplicate] oracle oracle

How to convert Rows to Columns in Oracle? [duplicate]


If you are using Oracle 10g, you can use the DECODE function to pivot the rows into columns:

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_tabGROUP BY loan_numberORDER BY loan_number;

Output:

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

You can achieve the same using Oracle PIVOT clause, introduced in 11g:

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

SQLFiddle example with both solutions: SQLFiddle example

Read more about pivoting here: Pivot In Oracle by Tim Hall


You can do it with a pivot query, like this:

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

Here is a demo on 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 fiddle demo here