sql >> Database teknologi >  >> RDS >> Oracle

Hent navne fra kommaseparerede id'er i SQL

For at gøre det skal du slutte dig til en tabel med heltal, så hver medarbejderrække forekommer lige så ofte, som der er afdelings-id'er i dens streng, men mindst én gang. For rækkerne i sammenføjningsresultatet er tallene i gå fra 1 til n , hvor n er antallet af id'er i strengen for den pågældende medarbejder (hvis der er afdelings-id'er for medarbejderen). Så kan du bruge REGEXP_SUBSTR() for at få det _i_th tal fra strengen. Brug det til venstre at slutte sig til afdelingerne for at få afdelingsnavnet. Brug derefter en aggregering ved hjælp af LISTAGG() at få en enkelt række til hver medarbejder 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<>fiddle




  1. Returner kun numeriske værdier i MariaDB

  2. mysql tilpasset global defineret variabel

  3. Hvordan dropper man en tabel, hvis den eksisterer?

  4. Så jeg installerede postgresql og localhost port i konflikt med ruby ​​app?