sql >> Databáze >  >> RDS >> Oracle

získat názvy z ID oddělených čárkami v SQL

Chcete-li to provést, připojte tabulku s celými čísly, aby se každý řádek zaměstnance vyskytoval tak často, jak jsou v řetězci ID oddělení, ale alespoň jednou. Pro řádky ve spojení jsou výsledkem čísla i přejít z 1 na n , kde n je počet ID v řetězci pro daného zaměstnance (pokud pro zaměstnance existují nějaká ID oddělení). Pak můžete použít REGEXP_SUBSTR() získat _i_té číslo z řetězce. Použijte to k levému připojení k oddělením, abyste získali název oddělení. Poté použijte agregaci pomocí LISTAGG() získat opět jeden řádek pro každého zaměstnance.

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<>housle




  1. Jak mohu VYBRAT více sloupců v CASE WHEN na SQL Server?

  2. Jak připojit Django k databázi MySQL přes SSL připojení?

  3. ORA-28113:Predikát zásad obsahuje chybu

  4. Připravený výpis s ON DUPLICATE KEY