Oracle19C部门层级结构视图

部门表主要字段包含:

字段 说明
ID 部门ID
CODE 部门编码,如101、101_10
NAME 部门名称
LEVEL 部门层级,1为顶级部门即集团、2为公司,3为部门,4...5...等等
ENABLE 是否启用
PARENTID 上级部门ID,上级部门为顶级的部门的PARENTID为~字符串
PRINCIPAL 部门负责人
PATH 部门ID路径,如101|101_10|101_1001|
DR 是否逻辑删除,1代表逻辑删除
YTENANT_ID 租户ID

递归查询部门带集团的SQL语句如下:

sql 复制代码
-- 递归查询部门带集团
SELECT 
    d.id,
    d.id as depid,
    d.code as depcode,
    d.name as depname,
    d."LEVEL" as DEPLEVEL,
    d.enable as isactive,
    d.parentid as DEPID_H,
    (SELECT code FROM org_admin d2 WHERE d2.id = d.parentid) AS depcode_h,
    (SELECT name FROM org_admin d2 WHERE d2.id = d.parentid) AS depname_h,
    c.id AS companyid,
    c.code AS companycode,
    c.name AS companyname,
    d.principal as dep_masterid,
    e.code as dep_mastercode,
    e.name as dep_mastername,
    d.path as path,
    SUBSTR(
        REPLACE(d.path, '|', ','), 
        1, 
        INSTR(REPLACE(d.path, '|', ','), ',', -1, 1) - 1
    ) as ancestors, -- 将101|101_10|101_1001| 转换为 101,101_10,101_1001
    d.description as memo
FROM 
    IUAP_APDOC_BASEDOC.org_admin d LEFT JOIN IUAP_APDOC_BASEDOC.BD_STAFF e on d.principal=e.id
    LEFT JOIN IUAP_APDOC_BASEDOC.org_admin b on d.parentid=b.id
    LEFT JOIN IUAP_APDOC_BASEDOC.org_admin c on (
        SUBSTR(d.code, 1, 3) = SUBSTR(b.code, 1, 3) AND SUBSTR(d.code, 1, 3) = c.code
    ) OR (
        SUBSTR(d.code, 1, 3) != SUBSTR(b.code, 1, 3) AND SUBSTR(b.code, 1, 3) = c.code
    )
WHERE d.dr = 0 and d.ytenant_id='z6126zln'
START WITH 
    d.parentid='~'
CONNECT BY 
    PRIOR d.id = d.parentid

不带集团的SQL语句如下:

sql 复制代码
SELECT
	a.id AS ID,
	a.id AS DepID, --部门ID
	a.code AS DepCode, --部门编码
	a.name AS DepName, --部门名称
	a.orgtype AS DepLevel, --部门层级 1-组织,2-部门
	a.enable AS IsActive, --是否启用 1-是 0-否
	a.parentid AS DepID_H, --上级部门ID
	b.code AS DepCode_H, --上级部门编码
	b.name AS DepName_H, --上级部门名称
	
	c.id AS CompanyID, --公司ID
	c.code AS CompanyCode, --公司编码
	c.name AS CompanyName, --公司名称
	
	a.principal AS Dep_MasterID, --部门主管ID
	d.code AS Dep_MasterCode, --部门主管编码
	d.name AS Dep_MasterName, --部门主管姓名
	a.description AS Memo --备注
FROM org_admin a
INNER JOIN org_admin b ON a.parentid = b.id
LEFT JOIN bd_staff d on a.principal = d.id 
INNER JOIN org_admin c ON (
    SUBSTR(a.code, 1, 3) = SUBSTR(b.code, 1, 3) AND SUBSTR(a.code, 1, 3) = c.code
) OR (
    SUBSTR(a.code, 1, 3) != SUBSTR(b.code, 1, 3) AND SUBSTR(b.code, 1, 3) = c.code
)
WHERE a.dr = 0 AND b.dr=0 and c.dr=0
ORDER BY a.code
相关推荐
爱考证的小刘3 个月前
MySQL OCP认证和Oracle OCP认证分别是什么?
mysql·mysql数据库·数据库mysql·oracle数据库·oracle19c·oracle认证·mysql自学
一只大耗子。3 个月前
Mac M系列芯片制作Oracle19镜像使用docker-compose运行
docker·docker-compose·mac·oracle19c
在未来等你8 个月前
SQL进阶之旅 Day 13:CTE与递归查询技术
sql·数据分析·数据库开发·sql优化·递归查询·cte
在未来等你8 个月前
高级SQL技巧:PostgreSQL高级特性实战指南
sql·postgresql·性能优化·窗口函数·递归查询
在未来等你9 个月前
高级SQL技巧:窗口函数与复杂查询优化实战
数据库·sql·性能优化·窗口函数·递归查询
来一杯龙舌兰1 年前
【Sql递归查询】Mysql、Oracle、SQL Server、PostgreSQL 实现递归查询的区别与案例(详解)
sql·mysql·oracle·recursive·递归查询·自链接
༨Rꫀꪖᦔᵧₒᵤ112 年前
【Red Hat 4.6---详细安装Oracle 19c】---静默方式安装
linux·数据库·oracle·静默安装oracle19c·安装oracle数据库·oracle19c