Oracle 使用“连接方式”分隔列

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

我有一个表,其中有父子关系中的行。最大父子关系深度为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
全期望输出-

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”的处理完全一样。我更新了答案以包含姓名。