部门表主要字段包含:
| 字段 | 说明 |
|---|---|
| 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