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

Oracle SQL Developer中如何按层级排序展示员工汇报结构

员工上下级汇报结构查询实现方案

这个场景属于典型的组织架构递归层级查询,核心通过递归遍历员工与直属经理的关联关系,生成带层级缩进的结构化结果,具体实现方式如下:

核心实现逻辑

  • 定位根节点:首先找到组织架构最高层人员,这类人员的manager_code通常满足以下任一特征:值为NULL、与自身employee_code相等、不存在于employee_code列中(为虚拟顶层节点编码)
  • 递归遍历关联:从根节点出发,逐轮匹配直属下属(即manager_code等于当前节点employee_code的记录),同时记录当前节点的层级深度、完整汇报链路、带缩进的展示文本
  • 排序输出:按完整汇报链路排序,保证同一上级的下属连续展示,层级从上到下顺序正确

通用代码示例

以下写法适用于所有支持递归CTE的数据库(包括MySQL 8.0+、PostgreSQL、SQL Server、Oracle 11gR2+、BigQuery等),可根据实际业务调整判断规则:

WITH RECURSIVE org_structure AS (
    -- 锚点查询:拉取顶层根节点
    SELECT
        employee_code,
        manager_code,
        1 AS level,
        CAST(employee_code AS CHAR(500)) AS report_path,
        CAST(employee_code AS CHAR(500)) AS display_name
    FROM emp_mgr_relation
    -- 根节点判断条件,根据实际数据修改:如果顶层manager为空就用IS NULL,如果是自管就改成manager_code = employee_code
    WHERE manager_code IS NULL

    UNION ALL

    -- 递归查询:逐层拉取下属
    SELECT
        e.employee_code,
        e.manager_code,
        os.level + 1 AS level,
        CONCAT(os.report_path, '>', e.employee_code) AS report_path,
        CONCAT(REPEAT('    ', os.level), '└── ', e.employee_code) AS display_name
    FROM emp_mgr_relation e
    INNER JOIN org_structure os ON e.manager_code = os.employee_code
)
SELECT
    display_name AS 汇报层级展示,
    employee_code AS 员工编码,
    manager_code AS 直属经理编码,
    level AS 层级深度,
    report_path AS 完整汇报路径
FROM org_structure
ORDER BY report_path;

适配调整说明

  • 缩进样式调整:如果需要匹配预期输出的前缀格式,修改REPEAT函数里的填充字符、层级连接符即可,比如把空格替换成-就能生成短横线缩进的效果
  • 老版本数据库兼容:如果使用不支持递归CTE的老版本数据库(比如MySQL 5.x),可以通过存储过程循环遍历层级生成结果,也可以在业务侧提前维护好每个员工的level、report_path字段,数据变更时同步更新,查询时直接按路径排序即可
  • 异常数据处理:如果存在循环汇报(比如A的上级是B,B的上级是A)的脏数据,可以在递归时增加路径重复判断,避免死循环

参考示例

输入数据集

示例员工经理映射数据集

预期输出效果

带层级缩进的汇报结构输出

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 09:09:56