Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

lấy tên từ các id được phân tách bằng dấu phẩy trong SQL

Để làm điều đó, hãy tham gia một bảng với các số nguyên, để mọi hàng nhân viên xảy ra thường xuyên khi có ID bộ phận trong chuỗi của nó nhưng ít nhất một lần. Đối với các hàng trong kết quả kết hợp là các số i đi từ 1 đến n , ở đâu n là số ID trong chuỗi cho nhân viên đó (nếu có bất kỳ ID bộ phận nào cho nhân viên đó). Sau đó, bạn có thể sử dụng REGEXP_SUBSTR() để lấy số thứ _i từ chuỗi. Sử dụng điều đó để rời tham gia các phòng ban, để lấy tên phòng ban. Sau đó, sử dụng tổng hợp bằng LISTAGG() để lấy lại một hàng cho từng nhân viên.

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. Thay thế cho chức năng giải mã

  2. Lỗi khi cố nhập trình điều khiển oracle jdbc7 bằng Maven

  3. No usename HR trong Oracle 12c

  4. vượt quá số lượng cấp SQL đệ quy tối đa (50)

  5. Chuyển đổi năm thập phân thành ngày tháng