Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Jak przekonwertować wiersze na kolumny w Oracle?

Jeśli używasz Oracle 10g, możesz użyć DECODE funkcja obracania wierszy w kolumny:

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;

Wyjście:

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

Możesz osiągnąć to samo, używając Oracle PIVOT klauzula, wprowadzona w 11g:

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

Przykład SQLFiddle z obydwoma rozwiązaniami:Przykład SQLFiddle

Przeczytaj więcej o przestawianiu tutaj:Pivot In Oracle autorstwa Tima Halla



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dlaczego DECODE Oracle daje mi inną wartość niż NVL?

  2. Jak uzyskać dane wejściowe od użytkownika w czasie wykonywania?

  3. 3 sposoby sprawdzania typu danych kolumny w Oracle

  4. Funkcja TANH() w Oracle

  5. Jak debugować ORA-01775:zapętlenie łańcucha synonimów?