从 SQL 中的逗号分隔 ID 中获取名称



我在甲骨文中有这种表

empid name deptid
1      a    1,2
2      b
3      c    1,2,3

我有如下部门表,

Deptid DeptName
1      IT
2      Finance
3      HR

我希望在选择语句中得到这样的结果,

empid name dept
1     a    IT,Finance
2     b
3     c    IT,Finance,HR

我在两个表中都有 1000+ 行,我是 pl\sql 的初学者,不知道该怎么做,请帮忙。

为此,请连接具有整数的表,以便每个员工行的出现频率与其字符串中的部门 ID 一样频繁,但至少出现一次。对于联接结果中的行,数字 i从 1 到 n,其中n是该员工的字符串中的 ID 数(如果该员工有任何部门 ID(。然后,您可以使用REGEXP_SUBSTR()从字符串中获取_i_th数字。使用它向左加入部门,获取部门名称。然后使用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;

数据库<>小提琴

最新更新