从列表中选择没有活跃用户的部门

问题描述

我有一个数据库,其中包含表'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 protected]"}] Department without active users

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)