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の例

    ピボットの詳細については、こちらをご覧ください:TimHallによるPivotIn Oracle



    1. SQL Server SHOWPLAN_ALL

    2. CentOS 8 /RHEL8にMySQL8.0をインストールする方法

    3. アークウェアを選択する5つの理由

    4. MySQLで新しいユーザーを作成し、1つのデータベースへのフルアクセスを許可します