sql >> Databáze >  >> RDS >> Oracle

Jak převést řádky na sloupce v Oracle?

Pokud používáte Oracle 10g, můžete použít DECODE funkce pro otočení řádků do sloupců:

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;

Výstup:

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

Toho můžete dosáhnout pomocí Oracle PIVOT klauzule zavedená v 11g:

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

Příklad SQLFiddle s oběma řešeními:Příklad SQLFiddle

Přečtěte si více o pivotování zde:Pivot In Oracle od Tima Hall



  1. Zřetězit hodnoty na základě ID

  2. Jak propojit databázi MySQL s webovou stránkou PHP

  3. Jak monitorovat kontejnery MySQL pomocí Prometheus – nasazení na Standalone a Swarm::Část první

  4. Nasazení zabezpečené multicloudové replikace MySQL na AWS a GCP s VPN