Oracle
 sql >> база данни >  >> RDS >> Oracle

Как да конвертирате редове в колони в Oracle?

Ако използвате 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;

Изход:

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

Можете да постигнете същото с помощта на Oracle PIVOT клауза, въведена в 11g:

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

Пример за SQLFiddle с двете решения:Пример за SQLFiddle

Прочетете повече за завъртането тук:Pivot In Oracle от Тим ​​Хол



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да пренасоча изхода на DBMS_OUTPUT.PUT_LINE към файл?

  2. Разделяне на Oracle по ключова дума

  3. Въведение в Oracle RMAN

  4. 3 начина за проверка на типа данни на колона в Oracle

  5. Функция или процедура за клауза IN