Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

dapatkan nama dari id yang dipisahkan koma dalam SQL

Untuk melakukan itu gabungkan tabel dengan bilangan bulat, sehingga setiap baris karyawan muncul sesering ada ID departemen dalam stringnya tetapi setidaknya satu kali. Untuk baris dalam hasil gabungan angka i pergi dari 1 ke n , di mana n adalah jumlah ID dalam string untuk karyawan tersebut (jika ada ID departemen untuk karyawan tersebut). Kemudian Anda dapat menggunakan REGEXP_SUBSTR() untuk mendapatkan nomor _i_th dari string. Gunakan itu untuk pergi bergabung dengan departemen, untuk mendapatkan nama departemen. Kemudian gunakan agregasi menggunakan LISTAGG() untuk mendapatkan satu baris lagi untuk setiap karyawan.

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




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. tidak ada ocijdbc12 di java.library.path

  2. Dapatkan id sisipan terakhir dengan Oracle 11g menggunakan JDBC

  3. Perbedaan antara FOR UPDATE OF dan FOR UPDATE

  4. Yang mana yang harus diunduh:JDK atau JRE?

  5. Menambahkan catatan bernilai nol dalam kueri menggunakan fungsi analitik kumulatif