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

カンマ区切りの値をOracleの行に変換します

    csvを行に変換する複雑な方法を見つけるよりもテーブルを正規化する方がはるかに簡単です。

    この場合、これを使用できます:

    with t(class_id, student, marks) as (
        select 1, 'tom,jam,tim', '55,65,75' from dual union all
        select 2, 'rim,gum,ram', '33,66,77' from dual
    )
    select
        t.class_id,
        regexp_substr(student,'[^,]+',1,x.column_value) student,
        regexp_substr(marks,'[^,]+',1,y.column_value) marks
    from t, table(
        cast(
            multiset(
                select level
                from dual
                connect by level <= regexp_count(t.student,',') + 1
            ) as sys.odcinumberlist
        )
    )x,table(
        cast(
            multiset(
                select level
                from dual
                connect by level <= regexp_count(t.marks,',') + 1
            ) as sys.odcinumberlist
        )
    )y
    

    生産:

    +----------+------------+-------+
    | CLASS_ID | STUDENT    | MARKS |
    +----------+------------+-------+
    | 1        | tom        | 55    |
    +----------+------------+-------+
    | 1        | tom        | 65    |
    +----------+------------+-------+
    | 1        | tom        | 75    |
    +----------+------------+-------+
    | 1        | jam        | 55    |
    +----------+------------+-------+
    | 1        | jam        | 65    |
    +----------+------------+-------+
    | 1        | jam        | 75    |
    +----------+------------+-------+
    | 1        | tim        | 55    |
    +----------+------------+-------+
    | 1        | tim        | 65    |
    +----------+------------+-------+
    | 1        | tim        | 75    |
    +----------+------------+-------+
    | 2        | rim        | 33    |
    +----------+------------+-------+
    | 2        | rim        | 66    |
    +----------+------------+-------+
    | 2        | rim        | 77    |
    +----------+------------+-------+
    | 2        | gum        | 33    |
    +----------+------------+-------+
    | 2        | gum        | 66    |
    +----------+------------+-------+
    | 2        | gum        | 77    |
    +----------+------------+-------+
    | 2        | ram        | 33    |
    +----------+------------+-------+
    | 2        | ram        | 66    |
    +----------+------------+-------+
    | 2        | ram        | 77    |
    +----------+------------+-------+
    


    1. matplotlibを使用してグラフを更新する方法

    2. パフォーマンスのためのPostgreSQLCROSSJOINインデックス作成

    3. ISO-8859-1文字は、utf-8mysql列に挿入されたテキストを切り捨てます

    4. python pipinstallpsycopg2インストールエラー