【泛微E9】查询部门的部门层级以及所有上级部门
效果图如下:
field1:一级部门
field2:二级部门
field3:三级部门
field4:四级部门
field5:五级部门
field6:六级部门
创建视图,view_bmcjpath
视图定义如下:
WITH RECURSIVE department_tree (id, DEPARTMENTMARK, supdepid, depth, path) AS (
-- 初始化查询(非递归部分)
SELECT
id,
DEPARTMENTMARK,
supdepid,
1 AS depth,
CAST(id AS CHAR(200)) AS path
FROM hrmdepartment
WHERE canceled IS NULL OR canceled <> 1
UNION ALL
-- 递归查询部分
SELECT
D.id,
D.DEPARTMENTMARK,
D.supdepid,
dt.depth + 1 AS depth,
CONCAT(dt.path, ',', D.id) AS path
FROM hrmdepartment D
JOIN department_tree dt ON D.supdepid = dt.id
WHERE D.canceled IS NULL OR D.canceled <> 1
),
ranked_departments AS (
SELECT
*,
ROW_NUMBER() OVER (PARTITION BY id ORDER BY depth DESC) AS rn
FROM department_tree
)
-- 选择每个id对应depth最大的记录,并应用字段选择逻辑
SELECT
id,
DEPARTMENTMARK,
supdepid,
depth,
path,
SUBSTRING_INDEX(SUBSTRING_INDEX(path, ',', 1), ',', -1) AS field1,
IF(LENGTH(path) - LENGTH(REPLACE(path, ',', '')) >= 1, SUBSTRING_INDEX(SUBSTRING_INDEX(path, ',', 2), ',', -1), NULL) AS field2,
IF(LENGTH(path) - LENGTH(REPLACE(path, ',', '')) >= 2, SUBSTRING_INDEX(SUBSTRING_INDEX(path, ',', 3), ',', -1), NULL) AS field3,
IF(LENGTH(path) - LENGTH(REPLACE(path, ',', '')) >= 3, SUBSTRING_INDEX(SUBSTRING_INDEX(path, ',', 4), ',', -1), NULL) AS field4,
IF(LENGTH(path) - LENGTH(REPLACE(path, ',', '')) >= 4, SUBSTRING_INDEX(SUBSTRING_INDEX(path, ',', 5), ',', -1), NULL) AS field5,
IF(LENGTH(path) - LENGTH(REPLACE(path, ',', '')) >= 5, SUBSTRING_INDEX(SUBSTRING_INDEX(path, ',', 6), ',', -1), NULL) AS field6
FROM ranked_departments
WHERE rn = 1
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架