1
我有一个父子关系中有行的表。最大亲子关系深度为3.使用连接的单独列
一位家长只有一个孩子。
表定义 -
CREATE TABLE USERS {
empid NUMBER,
name VARCHAR2,
department VARCHAR2(20),
oldempid NUMBER,
}
数据 -
EMPID NAME DEPARTMENT OLDEMPID
1 FOO IT 2
2 null HR 4
3 BAR ADMIN null
4 null DESIGN null
希望的输出 -
EMPID NAME DEPARTMENT_1 DEPARTMENT_2 DEPARTMENT_3
1 FOO IT HR DESIGN
3 BAR ADMIN null null
全部所需的输出 -
EMPID NAME DEPARTMENT_1 DEPARTMENT_2 DEPARTMENT_3 OLDEMPID_1 OLDEMPID_2
1 FOO IT HR DESIGN 2 4
3 BAR ADMIN null null null null
我已经尝试使用CONNECT BY PRIOR
SELECT CONNECT_BY_ROOT EMPID,
NAME,
RTRIM(LTRIM(SYS_CONNECT_BY_PATH(DEPARTMENT, '-'), '-'), '-') AS DEPARTMENT,
RTRIM(LTRIM(SYS_CONNECT_BY_PATH(OLDEMPID, '-'), '-'), '-') AS OLDEMPID
FROM USERS
WHERE CONNECT_BY_ISLEAF = 1
CONNECT BY PRIOR OLDEMPID = EMPID;
我得到的输出 -
EMPID NAME DEPARTMENT OLDEMPID
1 null IT-HR-DESIGN 1-2-4
3 BAR ADMIN null
谢谢。但是,我仍然遇到员工姓名的问题。我编辑了这个问题。你能看看吗? – JHS
你对“名字”的处理正是我对“empid”所做的。我更新了答案以包含NAME。 – mathguy