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

SQLでコンマ区切りのIDから名前を取得する

    これを行うには、整数を使用してテーブルを結合します。これにより、すべての従業員の行は、文字列に部門IDがあるのと同じ頻度で発生しますが、少なくとも1回は発生します。結合結果の行の場合、番号 i 1からnに移動します 、ここで n その従業員の文字列内のIDの数です(従業員の部門IDがある場合)。次に、REGEXP_SUBSTR()を使用できます 文字列から_i_番目の数値を取得します。これを使用して、部門に左参加し、部門名を取得します。次に、LISTAGG()を使用して集計を使用します 従業員ごとに1行を再度取得します。

    SELECT E.EMPID,
           E.NAME,
           E.DEPTID,
           LISTAGG(D.DEPTNAME, ',') WITHIN GROUP (ORDER BY I.I) DEPTNAME
           FROM EMPLOYEE E
                LEFT JOIN (SELECT ROW_NUMBER() OVER (ORDER BY DEPTID) I
                                  FROM DEPARTMENT) I
                          ON I.I <= REGEXP_COUNT(E.DEPTID, ',') + 1
                LEFT JOIN DEPARTMENT D
                          ON D.DEPTID = TO_NUMBER(REPLACE(REGEXP_SUBSTR(',' || E.DEPTID, ',([[:digit:]]+)', 1, I.I), ',', ''))
           GROUP BY E.EMPID,
                    E.NAME,
                    E.DEPTID;
    

    db <> fiddle




    1. フィルタリングされたスターパターンのデータベースレプリケーションを設定できますか?

    2. MySQLを使用したSQLクエリ

    3. Oracleでクエリのパフォーマンスを測定する方法

    4. codeigniterの配列から単一の値を取得する方法