sql >> Databasteknik >  >> RDS >> Oracle

hämta namn från kommaseparerade ID i SQL

För att göra det ansluter du en tabell med heltal, så att varje anställd rad förekommer så ofta som det finns avdelnings-ID:n i dess sträng men minst en gång. För raderna i sammanfogningsresultatet siffrorna i gå från 1 till n , där n är antalet ID:n i strängen för den anställde (om det finns några avdelnings-ID:n för den anställde). Sedan kan du använda REGEXP_SUBSTR() för att få det _i_:e numret från strängen. Använd det för att gå med i avdelningarna till vänster för att få avdelningens namn. Använd sedan en aggregering med LISTAGG() för att få en enda rad för varje anställd igen.

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




  1. ODP.NET Anslutningsbegäran tog timeout

  2. Dela CLOB-kolumn baserat på ny rad - Oracle SQL

  3. DATETIMEFROMPARTS() Exempel i SQL Server (T-SQL)

  4. Index på primära och främmande nycklar