sql >> Base de Datos >  >> RDS >> Oracle

obtener nombres de identificadores separados por comas en SQL

Para hacer eso, únase a una tabla con números enteros, de modo que cada fila de empleados aparezca con tanta frecuencia como ID de departamento en su cadena, pero al menos una vez. Para las filas en el resultado de combinación, los números i ir de 1 a n , donde n es el número de ID en la cadena para ese empleado (si hay algún ID de departamento para el empleado). Entonces puedes usar REGEXP_SUBSTR() para obtener el _i_ésimo número de la cadena. Use eso para unir a la izquierda los departamentos, para obtener el nombre del departamento. Luego use una agregación usando LISTAGG() para volver a obtener una sola fila para cada empleado.

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