You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle使用connect by prior实现层级员工表转扁平表的相关问题

实现方案

你需要的Oracle SQL语句可以通过两种方式实现,第一种为你要求的CONNECT BY PRIOR层级查询写法,第二种为固定两级上级场景下更简洁的自连接写法:

写法1:使用CONNECT BY PRIOR实现

SELECT 
    empID AS emp,
    empName,
    MAX(CASE WHEN lv = 1 THEN managerID END) AS subBoss,
    MAX(CASE WHEN lv = 1 THEN mgrName END) AS subBossName,
    MAX(CASE WHEN lv = 2 THEN managerID END) AS Boss,
    MAX(CASE WHEN lv = 2 THEN mgrName END) AS BossName
FROM (
    SELECT 
        CONNECT_BY_ROOT e.empID AS empID,
        CONNECT_BY_ROOT e.empName AS empName,
        m.empID AS managerID,
        m.empName AS mgrName,
        LEVEL AS lv
    FROM empTabl e
    LEFT JOIN empTabl m ON e.managerID = m.empID
    CONNECT BY PRIOR e.managerID = e.empID
    START WITH e.empID IN (SELECT empID FROM empTabl)
) t
GROUP BY empID, empName
ORDER BY empID;

写法2:两次自连接实现(固定2级上级场景更推荐)

SELECT 
    e.empID AS emp,
    e.empName,
    m1.empID AS subBoss,
    m1.empName AS subBossName,
    m2.empID AS Boss,
    m2.empName AS BossName
FROM empTabl e
LEFT JOIN empTabl m1 ON e.managerID = m1.empID
LEFT JOIN empTabl m2 ON m1.managerID = m2.empID
ORDER BY e.empID;

两种写法执行后都可以得到你需要的输出结果。

内容的提问来源于stack exchange,提问作者Sara Moradi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 22:54:03