Oracle
 sql >> Baza danych >  >> RDS >> Oracle

pobierz nazwy z identyfikatorów oddzielonych przecinkami w SQL

W tym celu połącz tabelę z liczbami całkowitymi, tak aby każdy wiersz dotyczący pracownika występował tak często, jak w jego ciągu znajdują się identyfikatory działu, ale co najmniej jeden raz. Dla wierszy w wyniku łączenia liczby i przejdź od 1 do n , gdzie n to liczba identyfikatorów w ciągu dla tego pracownika (jeśli istnieją identyfikatory działu dla pracownika). Następnie możesz użyć REGEXP_SUBSTR() aby uzyskać _i_tą liczbę z ciągu. Użyj tego, aby dołączyć do departamentów, aby uzyskać nazwę departamentu. Następnie użyj agregacji za pomocą LISTAGG() aby ponownie uzyskać jeden wiersz dla każdego pracownika.

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Dynamiczne instrukcje Select SQL z MyBatis

  2. Zapytanie rekurencyjne dla zależności tabeli nie powtarza się tak często, jak bym chciał

  3. EM 12c Regulacja wartości progowych

  4. Optymalizator Oracle 10 od REGUŁY do KOSZTÓW:dlaczego?

  5. Konwertuj ciąg znaków oddzielonych przecinkami na tablicę w PL/SQL