如何解决从列表中选择没有活跃用户的部门
我有一个数据库,其中包含表'departments'
,'branches'
和'staff'
部门:
id_department,name_department
分支机构:
id_branch,name_branch
工作人员:
id_staff,email,fk_branch,fk_department,status
我有一个部门及其各自部门的清单:
id_branch,id_department
1,2
1,3
2,5
3,2
我想过滤此列表,并只获取公司中活跃用户的那些单位。
我实际上得到了结果,但是我认为我过于复杂了,尤其是在GROUP BY部分中,我认为可能没有必要。
WITH dept_managers_in_country AS
(
SELECT
(
SELECT
id_staff
FROM dsv_global.staff
WHERE email = s.email
) as id_staff,s.email,dm.fk_branch,dm.fk_department
FROM dsv_one_access.databases_access.department_module dm
--Getting dept. manager fk_staff
INNER JOIN dsv_one_access.databases_access.u_staff_modules usm
ON usm.u_staff_modules = dm.fk_u_staff_modules
--Getting dept. manager email
INNER JOIN dsv_one_access.databases_access.staff s
ON s.id_staff = usm.fk_staff
WHERE s.fk_country = 6
),--departments current user has
depts_in_charge AS
(
SELECT
fk_branch,fk_department
FROM dept_managers_in_country
WHERE id_staff = 960
--won't work proced if user is not
--dept. manager and line below is removed
UNION SELECT 0,0
)
SELECT
dic.fk_branch,dic.fk_department,d.name_department,d.complete_name_dept,--Choosing dept. manager in department
(
SELECT
id_staff AS id_supervisor,email
FROM dept_managers_in_country
WHERE fk_branch = dic.fk_branch AND fk_department = dic.fk_department
FOR JSON PATH
) as supervisors,'Department without active users' as comments
FROM depts_in_charge dic
INNER JOIN dsv_global.departments d
ON dic.fk_department = d.id_department
LEFT JOIN dsv_global.staff s
on s.fk_branch = dic.fk_branch
AND s.fk_department = dic.fk_department
WHERE @level_view = 'department_manager'
GROUP BY dic.fk_branch,d.complete_name_dept
HAVING SUM(CASE WHEN s.status = 'ACTIVE' THEN 1 ELSE 0 END) = 0
结果是:
fk_branch fk_department name_department complete_name_dept supervisors comments
4 66 FIA Freight import[{"id_supervisor":960,"email":"email@x.com"}] Department without active users
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。