Oracle 使用“连接方式”分隔列
我有一个表,其中有父子关系中的行。最大父子关系深度为3 父母中的一方只有一个孩子。 表定义-Oracle 使用“连接方式”分隔列,oracle,oracle11g,connect-by,Oracle,Oracle11g,Connect By,我有一个表,其中有父子关系中的行。最大父子关系深度为3 父母中的一方只有一个孩子。 表定义- CREATE TABLE USERS { empid NUMBER, name VARCHAR2, department VARCHAR2(20), oldempid NUMBER, } 资料- EMPID NAME DEPARTMENT OLDEMPID 1 FOO IT 2 2 null HR
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
全期望输出-
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
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
你还需要关注你的结果。您可以手动完成,也可以使用PIVOT操作(因为您用oracle11g标记了它,这是PIVOT可用的第一个版本)。子查询(在FROM子句末尾)是带有“connect by”的分层查询 输出:
EMPID NAME DEPARTMENT_1 DEPARTMENT_2 DEPARTMENT_3 OLDEMPID_2 OLDEMPID_3
---------- ---- ------------ ------------ ------------ ---------- ----------
1 FOO IT HR DESIGN 2 4
3 BAR ADMIN
非常感谢。然而,我仍然得到员工姓名的问题。我已经编辑了这个问题。你能看一下吗?你对“name”的处理和我对“empid”的处理完全一样。我更新了答案以包含姓名。