sql >> Database >  >> RDS >> Oracle

krijg namen van door komma's gescheiden id's in SQL

Om dat te doen, voegt u een tabel met gehele getallen samen, zodat elke rij van een werknemer net zo vaak voorkomt als er afdelings-ID's in de tekenreeks zijn, maar ten minste één keer. Voor de rijen in het samenvoegresultaat zijn de getallen i ga van 1 naar n , waar n is het aantal ID's in de tekenreeks voor die werknemer (als er afdelings-ID's zijn voor de werknemer). Dan kunt u REGEXP_SUBSTR() . gebruiken om het _i_de getal uit de string te halen. Gebruik die om naar de afdelingen te gaan, om de afdelingsnaam te krijgen. Gebruik dan een aggregatie met LISTAGG() om weer een enkele rij voor elke werknemer te krijgen.

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. Hoe de tabelnaam van sqlite DB weer te geven -- Android

  2. Hoe kan ik een 'versienummer'-kolom in het algemeen sorteren met behulp van een SQL Server-query

  3. ODBC 5.1-verbindingsreeks voor MySQL met alleen-lezen toegang

  4. SQL:cumulatieve kolommen &som over de rij