点击蓝字 关注我们
重点
最近创建了一个关于 泛微OA圈,希望能够帮助大家,有困难一起解决,有钱一起赚!如果大家想加入的话,可以加文末微信。
前言
本文中的SQL来源于泛微知识共享库里面的常用SQL,希望以下SQL可以在日常OA系统的运维或者使用过程中可以给大家带来方便。
流程常用数据库表
workflow_base:工作流基本信息表
01
查询流程审批人中离职人员
SELECT DISTINCT
A.WORKFLOWNAME,
C.NODENAME,
G.LASTNAME,
G.STATUS,
G.WORKCODE,
G.ID
FROM workflow_base AS A
INNER JOIN workflow_flownode AS B
ON B.WORKFLOWID = A.ID
INNER JOIN workflow_nodebase AS C
ON B.NODEID=C.ID
INNER JOIN workflow_nodegroup AS D
ON C.ID=D.NODEID
INNER JOIN workflow_groupdetail AS E
ON D.ID=E.GROUPID
INNER JOIN workflow_hrmoperator AS F
ON E.GROUPID=F.GROUPID
INNER JOIN hrmresource AS G
ON F.OBJID=G.ID
WHERE G.STATUS='5'
ORDER BY A.WORKFLOWNAME
02
查询流程审批节点的审批条件
SELECT
E.TYPENAME AS 流程类型,
A.ID 流程ID,
A.WORKFLOWNAME AS 流程名称,
B.GROUPNAME AS 流程节点,
C.CONDITIONCN AS 出口条件,
D.CONDITIONCN AS 批次条件
FROM
WORKFLOW_BASE A,
WORKFLOW_NODEGROUP B,
WORKFLOW_NODELINK C,
WORKFLOW_GROUPDETAIL D,
WORKFLOW_TYPE E
WHERE A.ID=C.WORKFLOWID
AND C.NODEID=B.NODEID
AND D.GROUPID=B.ID
AND A.WORKFLOWTYPE=E.ID
AND (C.CONDITIONCN IS NOT NULL
OR D.CONDITIONCN IS NOT NULL )
03
查询部门的部门层级以及所有上级部门
创建视图,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
上述视图中:
field1:一级部门
field2:二级部门
field3:三级部门
field4:四级部门
field5:五级部门
field6:六级部门
查询效果:
04
批量更新修复人员的各级部门与实际部门不一致的问题
-- 查询不匹配的人员
SELECT H.id, H.LASTNAME, H.DEPARTMENTID
FROM cus_fielddata c
INNER JOIN hrmresource H ON H.id = c.id
LEFT JOIN view_bmcjpath v ON H.departmentid = v.id
WHERE H.STATUS < 5
AND c.scopeid = -1
AND (
(c.field26 IS NOT NULL AND c.field26 <> v.field1) OR
(c.field26 IS NULL AND v.field1 IS NOT NULL) OR
(c.field27 IS NOT NULL AND c.field27 <> v.field2) OR
(c.field27 IS NULL AND v.field2 IS NOT NULL) OR
(c.field28 IS NOT NULL AND c.field28 <> v.field3) OR
(c.field28 IS NULL AND v.field3 IS NOT NULL) OR
(c.field31 IS NOT NULL AND c.field31 <> v.field4) OR
(c.field31 IS NULL AND v.field4 IS NOT NULL) OR
(c.field32 IS NOT NULL AND c.field32 <> v.field5) OR
(c.field32 IS NULL AND v.field5 IS NOT NULL) OR
(c.field33 IS NOT NULL AND c.field33 <> v.field6) OR
(c.field33 IS NULL AND v.field6 IS NOT NULL)
)
-- 更新各级部门不匹配的人员
UPDATE cus_fielddata c
INNER JOIN hrmresource a ON a.id = c.id
LEFT JOIN view_bmcjpath v ON a.departmentid = v.id
SET
c.field26 = v.field1,
c.field27 = v.field2,
c.field28 = v.field3,
c.field31 = v.field4,
c.field32 = v.field5,
c.field33 = v.field6
WHERE
c.scopeid = -1
AND a.STATUS < 5
AND (
(c.field26 IS NOT NULL AND c.field26 <> v.field1) OR
(c.field26 IS NULL AND v.field1 IS NOT NULL) OR
(c.field27 IS NOT NULL AND c.field27 <> v.field2) OR
(c.field27 IS NULL AND v.field2 IS NOT NULL) OR
(c.field28 IS NOT NULL AND c.field28 <> v.field3) OR
(c.field28 IS NULL AND v.field3 IS NOT NULL) OR
(c.field31 IS NOT NULL AND c.field31 <> v.field4) OR
(c.field31 IS NULL AND v.field4 IS NOT NULL) OR
(c.field32 IS NOT NULL AND c.field32 <> v.field5) OR
(c.field32 IS NULL AND v.field5 IS NOT NULL) OR
(c.field33 IS NOT NULL AND c.field33 <> v.field6) OR
(c.field33 IS NULL AND v.field6 IS NOT NULL)
)
微信号 | Helper-OA
原文始发于微信公众号(OA大助手):第二弹:泛微OA常用一些查询SQL分享来啦,文末有彩蛋
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论