Oracle
 sql >> база данни >  >> RDS >> Oracle

вземете имена от идентификатори, разделени със запетая, в SQL

За да направите това, присъединете се към таблица с цели числа, така че всеки ред за служител да се среща толкова често, колкото има идентификатори на отдели в неговия низ, но поне веднъж. За редовете в съединяването се получават числата i преминете от 1 към n , където n е броят на идентификаторите в низа за този служител (ако има идентификатори на отдел за служителя). След това можете да използвате REGEXP_SUBSTR() за да получите _i_тото число от низа. Използвайте това, за да се присъедините към отделите отляво, за да получите името на отдела. След това използвайте агрегиране чрез LISTAGG() за да получите отново един ред за всеки служител.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да създадете нова база данни след първоначално инсталиране на база данни Oracle 11g Express Edition?

  2. OracleCommandBuilder.DeriveParameters() хвърля OracleException:ORA-06564:обектът не съществува ORA-06512:в SYS.DBMS_UTILITY

  3. Как да конвертирате часови зони в Oracle?

  4. Oracle SQL подреждане по проблеми с подзаявката!

  5. Разгръщане на множество изчислителни екземпляри на Oracle, използвайки пул от екземпляри и terraform