sql >> データベース >  >> RDS >> Oracle

Oracleデータベースのクエリの結果で列を分割する方法

    PIVOTを使用する およびROW_NUMBER 分析関数:

    SQLフィドル

    Oracle11gR2スキーマのセットアップ

    CREATE TABLE your_query_result (sal, cat, id, shop ) AS
    SELECT 1900,   '34R5',   10,   'dense' FROM DUAL UNION ALL
    SELECT 1900,   '34r5',   10,   'SVM' FROM DUAL UNION ALL
    SELECT 1900,   '34r5',   10,   'bpo' FROM DUAL UNION ALL
    SELECT 2345,   '3ER4',   11,   'kpo' FROM DUAL UNION ALL
    SELECT 2345,   '3ER4',   11,   'infra' FROM DUAL UNION ALL
    SELECT 12345,  '34F4',   12,   'const' FROM DUAL;
    

    クエリ1

    SELECT sal,
           cat,
           id,
           "1_SHOP" AS shop_1,
           "2_SHOP" AS shop_2,
           "3_SHOP" AS shop_3
    FROM   (
      SELECT r.*,
             ROW_NUMBER() OVER (
               PARTITION BY sal, cat, id
               ORDER BY shop
             ) AS rn
      FROM   (
        SELECT * FROM your_query_result
      ) r
    )
    PIVOT (
      MAX( shop ) AS shop
      FOR rn IN ( 1, 2, 3 )
    )
    

    結果

    |   SAL |  CAT | ID | SHOP_1 | SHOP_2 | SHOP_3 |
    |-------|------|----|--------|--------|--------|
    |  1900 | 34R5 | 10 |  dense | (null) | (null) |
    |  1900 | 34r5 | 10 |    SVM |    bpo | (null) |
    |  2345 | 3ER4 | 11 |  infra |    kpo | (null) |
    | 12345 | 34F4 | 12 |  const | (null) | (null) |
    

    同じ行の最初の行と2番目の行が必要な場合は、CATを変更するだけです。 ROW_NUMBERを生成する前に列を小文字にする およびPIVOT ing。




    1. PHPからのMySQL結果をJavaScript配列に挿入する

    2. 互換性のあるORA-16484のためにアーカイバがハングしました

    3. 正規表現を使用してmysql列から部分文字列を抽出します

    4. node-mysqlを使用してMySQL接続を閉じるのはいつですか?