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

Oracleの複数の列の値を連結します

    SQLフィドル

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

    CREATE TABLE test (col1, col2, col3, col4, col5 ) AS
              SELECT 1, 'A', 'B', 'C', 'D' FROM DUAL
    UNION ALL SELECT 2, 'A', 'B', 'C', NULL FROM DUAL
    UNION ALL SELECT 3, 'C', 'A', NULL, NULL FROM DUAL
    UNION ALL SELECT 4, 'D', 'A', 'C', NULL FROM DUAL
    UNION ALL SELECT 5, NULL, NULL, NULL, NULL FROM DUAL
    UNION ALL SELECT 6, NULL, NULL, NULL, 'A' FROM DUAL
    UNION ALL SELECT 7, 'B', NULL, NULL, 'A' FROM DUAL
    UNION ALL SELECT 8, NULL, 'C', NULL, 'A' FROM DUAL;
    

    クエリ1

    NULLがない場合 他の値の間の値(7行目と8行目に複数のコンマが導入されます):

    SELECT col1,
           TRIM( ',' FROM col2||','||col3||','||col4||','||col5 ) AS col2
    FROM   test
    

    結果

    | COL1 |    COL2 |
    |------|---------|
    |    1 | A,B,C,D |
    |    2 |   A,B,C |
    |    3 |     C,A |
    |    4 |   D,A,C |
    |    5 |  (null) |
    |    6 |       A |
    |    7 |   B,,,A |
    |    8 |    C,,A |
    

    最後の2つのクエリは、すべての例で機能します。

    クエリ2

    SELECT col1,
           TRIM( ',' FROM col2 || NVL2( col3, ','||col3, NULL ) || NVL2( col4, ','||col4, NULL ) || NVL2( col5, ','||col5, NULL ) ) AS col2
    FROM   test
    

    結果

    | COL1 |    COL2 |
    |------|---------|
    |    1 | A,B,C,D |
    |    2 |   A,B,C |
    |    3 |     C,A |
    |    4 |   D,A,C |
    |    5 |  (null) |
    |    6 |       A |
    |    7 |     B,A |
    |    8 |     C,A |
    

    クエリ3

    SELECT col1,
           REGEXP_REPLACE( col2||','||col3||','||col4||','||col5, '(^|,),+|,+($)', '\1' ) AS col2
    FROM   test
    

    結果

    | COL1 |    COL2 |
    |------|---------|
    |    1 | A,B,C,D |
    |    2 |   A,B,C |
    |    3 |    C,A, |
    |    4 |   D,A,C |
    |    5 |  (null) |
    |    6 |       A |
    |    7 |     B,A |
    |    8 |     C,A |
    


    1. SQL Server Geography データ型 直線上で最も近い点

    2. PL/pgSQL匿名コードブロック

    3. Laravel eloquent-SELECTの前にヒントを追加する方法はありますか?

    4. SQLite RealvalsをJavaBigDecimal値に書き込むにはどうすればよいですか?