sql - 从没有活跃用户的列表中选择部门
问题描述
我有一个带有表的数据库'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,
dic.fk_department,
d.name_department,
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
解决方案
推荐阅读
- mysql - MySQL 错误 1292:截断不正确的双精度值
- reactjs - 访问字段的状态 ID React
- javascript - 将 Google Maps API v3 搜索结果限制在某个国家/地区,同时将它们偏向某个位置
- javascript - What exactly is concat + apply doing to flatten an array?
- django - 如何扩展 django 的 createsuperuser 管理命令?
- typescript - TypeScript 3.0 React defaultProps 支持不起作用
- generics - 引用 Kotlin 中的多边界通用接收器扩展函数
- r - 如何写一个 n 圆的转移矩阵
- python - 如何根据工作人员结果将额外任务添加到正在运行的多处理池中?
- php - 无法使用尊重验证从断言方法中捕获异常