389 lines
11 KiB
MySQL
389 lines
11 KiB
MySQL
|
-- 片区
|
||
|
|
||
|
|
||
|
${if(len(p_area) = 0,"","/*")}
|
||
|
with one_to_many AS(
|
||
|
SELECT
|
||
|
a.username AS username -- 用户名
|
||
|
,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名
|
||
|
FROM ods_one_to_many_perm a
|
||
|
JOIN mysql.help_topic b
|
||
|
on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1)
|
||
|
WHERE a.username = '${fine_username}'
|
||
|
),hr_date AS
|
||
|
(
|
||
|
|
||
|
|
||
|
SELECT
|
||
|
B.organ_code AS organ_code
|
||
|
,B.organ_name AS organ_name
|
||
|
,SUM(A.bzs) AS bzs
|
||
|
,SUM(zzs) AS zzs -- 在职人数
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
A1.pq AS pq
|
||
|
,SUM(A1.zzs) AS zzs
|
||
|
,sum(A1.bzs) AS bzs
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
pq -- 片区
|
||
|
,ny
|
||
|
,SUM(zzs) AS zzs -- 在职数
|
||
|
,SUM(bzs) AS bzs -- 编制数
|
||
|
FROM ods_hr_view_mbl_d
|
||
|
WHERE pq not in('89','267') -- 排除了佳美、悦汇
|
||
|
and ny > '2024-10'
|
||
|
GROUP BY pq,ny,xm
|
||
|
UNION ALL
|
||
|
SELECT
|
||
|
organ_code as pq
|
||
|
,concat(left(ym,4),'-',right(ym,2)) as ny
|
||
|
,SUM(zzs) AS zzs
|
||
|
,SUM(bzs) AS bzs
|
||
|
FROM ods_hr_history_bz_num
|
||
|
WHERE 1 = 1
|
||
|
GROUP BY ym,organ_code
|
||
|
)A1
|
||
|
WHERE A1.ny = '${p_startdate}'
|
||
|
group by A1.pq
|
||
|
)A
|
||
|
RIGHT JOIN
|
||
|
(
|
||
|
SELECT
|
||
|
organ_code -- erp片区编码
|
||
|
,organ_name -- erp片区名称
|
||
|
,hr_organ_id -- hr片区编码
|
||
|
,hr_organ_name -- hr片区名称
|
||
|
FROM dim_organ_mapping
|
||
|
WHERE length(hr_organ_id) > 0
|
||
|
GROUP BY
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,hr_organ_id
|
||
|
,hr_organ_name
|
||
|
)B
|
||
|
ON A.pq = B.hr_organ_id
|
||
|
group by B.organ_code, B.organ_name
|
||
|
|
||
|
)
|
||
|
select
|
||
|
a.organ_name as p_area -- 片区/项目
|
||
|
,sum(room_num) as room_num -- 房间总数 【总户数】
|
||
|
,sum(check_ins_num) as check_ins_num -- 入住数 【入住户数】
|
||
|
,case when sum(check_ins_num) = 0
|
||
|
then 0
|
||
|
else sum(check_ins_num) / sum(room_num)
|
||
|
end as occupancy_rate -- 入住率
|
||
|
,SUM(IFNULL(b.zzs,0)) AS zzs -- 在职数
|
||
|
,SUM(ifnull(b.bzs,0)) AS bzs -- 编制数
|
||
|
,CASE WHEN SUM(b.bzs) = 0 THEN 0 ELSE SUM(b.zzs) / SUM(b.bzs) END AS full_rate -- 满编率
|
||
|
from
|
||
|
(
|
||
|
SELECT
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,SUM(room_num) AS room_num
|
||
|
,SUM(check_ins_num) AS check_ins_num
|
||
|
FROM dws_operation_room_park_info_d
|
||
|
WHERE 1 = 1
|
||
|
-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")}
|
||
|
AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL
|
||
|
THEN comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
|
||
|
ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
|
||
|
|
||
|
group by
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
) a
|
||
|
left join hr_date b
|
||
|
on a.organ_code = b.organ_code
|
||
|
|
||
|
group by
|
||
|
a.organ_name
|
||
|
|
||
|
${if(len(p_area) = 0,"","*/")}
|
||
|
|
||
|
|
||
|
-- 项目
|
||
|
|
||
|
${if(len(p_area) > 0,"","/*")}
|
||
|
with one_to_many AS(
|
||
|
SELECT
|
||
|
a.username AS username -- 用户名
|
||
|
,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名
|
||
|
FROM ods_one_to_many_perm a
|
||
|
JOIN mysql.help_topic b
|
||
|
on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1)
|
||
|
WHERE a.username = '${fine_username}'
|
||
|
),hr_date AS
|
||
|
(
|
||
|
|
||
|
|
||
|
SELECT
|
||
|
B.organ_code AS organ_code
|
||
|
,B.organ_name AS organ_name
|
||
|
,B.comm_id AS comm_id
|
||
|
,B.comm_name AS comm_name
|
||
|
,SUM(A.bzs) AS bzs
|
||
|
,SUM(zzs) AS zzs -- 在职人数
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
A1.pq AS pq
|
||
|
,A1.xm AS xm
|
||
|
,SUM(A1.zzs) AS zzs
|
||
|
,sum(A1.bzs) AS bzs
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
pq -- 片区
|
||
|
,ny
|
||
|
,xm
|
||
|
,SUM(zzs) AS zzs -- 在职数
|
||
|
,SUM(bzs) AS bzs -- 编制数
|
||
|
FROM ods_hr_view_mbl_d
|
||
|
WHERE pq not in('89','267') -- 排除了佳美、悦汇
|
||
|
GROUP BY pq,ny,xm
|
||
|
-- 没有项目的历史数据
|
||
|
-- UNION ALL
|
||
|
-- SELECT
|
||
|
-- organ_code as pq
|
||
|
-- ,concat(left(ym,4),'-',right(ym,2)) as ny
|
||
|
-- ,'' AS xm
|
||
|
-- ,SUM(zzs) AS zzs
|
||
|
-- ,SUM(bzs) AS bzs
|
||
|
-- FROM ods_hr_history_bz_num
|
||
|
-- WHERE 1 = 1
|
||
|
-- GROUP BY ym,organ_code
|
||
|
)A1
|
||
|
WHERE A1.ny = '${p_startdate}'
|
||
|
group by A1.pq,A1.xm
|
||
|
)A
|
||
|
RIGHT JOIN
|
||
|
(
|
||
|
SELECT
|
||
|
organ_code -- erp片区编码
|
||
|
,organ_name -- erp片区名称
|
||
|
,hr_organ_id -- hr片区编码
|
||
|
,hr_organ_name -- hr片区名称
|
||
|
,hr_comm_id -- hr项目id
|
||
|
,hr_comm_name -- hr项目名称
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
FROM dim_organ_mapping
|
||
|
WHERE length(hr_comm_id) > 0
|
||
|
GROUP BY
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,hr_organ_id
|
||
|
,hr_organ_name
|
||
|
,hr_comm_id
|
||
|
,hr_comm_name
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
)B
|
||
|
ON A.pq = B.hr_organ_id
|
||
|
AND A.xm = B.hr_comm_id
|
||
|
group by B.organ_code, B.organ_name, B.comm_id, B.comm_name
|
||
|
|
||
|
)
|
||
|
select
|
||
|
a.comm_name as p_area -- 片区/项目
|
||
|
-- organ_name -- 片区名称
|
||
|
-- ,comm_name -- 项目名称
|
||
|
,sum(room_num) as room_num -- 房间总数 【总户数】
|
||
|
,sum(check_ins_num) as check_ins_num -- 入住数 【入住户数】
|
||
|
,case when sum(check_ins_num) = 0
|
||
|
then 0
|
||
|
else sum(check_ins_num) / sum(room_num)
|
||
|
end as occupancy_rate -- 入住率
|
||
|
,SUM(IFNULL(b.zzs,0)) AS zzs -- 在职数
|
||
|
,SUM(ifnull(b.bzs,0)) AS bzs -- 编制数
|
||
|
,CASE WHEN SUM(b.bzs) = 0 THEN 0 ELSE SUM(b.zzs) / SUM(b.bzs) END AS full_rate -- 满编率
|
||
|
from
|
||
|
(
|
||
|
SELECT
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
,SUM(room_num) AS room_num
|
||
|
,SUM(check_ins_num) AS check_ins_num
|
||
|
FROM dws_operation_room_park_info_d
|
||
|
WHERE 1 = 1
|
||
|
-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")}
|
||
|
AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL
|
||
|
THEN comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
|
||
|
ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
|
||
|
|
||
|
group by
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
) a
|
||
|
left join hr_date b
|
||
|
on a.organ_code = b.organ_code
|
||
|
and a.comm_id = b.comm_id
|
||
|
where 1=1
|
||
|
${IF(LEN(p_area)!=0," and a.organ_code IN ('"+p_area+"')","")}
|
||
|
-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")}
|
||
|
AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL
|
||
|
THEN a.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
|
||
|
ELSE ${if(left(fine_role,2)=="项目","a.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
|
||
|
|
||
|
group by
|
||
|
a.comm_name
|
||
|
|
||
|
|
||
|
${if(len(p_area) > 0,"","*/")}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
-- ======================================
|
||
|
-- 住服比异常项目数
|
||
|
-- ======================================
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
with one_to_many AS(
|
||
|
SELECT
|
||
|
a.username AS username -- 用户名
|
||
|
,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_project, ',',b.help_topic_id + 1),',',-1) AS mang_project -- 管理项目名
|
||
|
FROM ods_one_to_many_perm a
|
||
|
JOIN mysql.help_topic b
|
||
|
on b.help_topic_id < (LENGTH(a.mang_project) - length(replace(a.mang_project,',','')) + 1)
|
||
|
WHERE a.username = '${fine_username}'
|
||
|
),hr_date AS
|
||
|
(
|
||
|
|
||
|
|
||
|
SELECT
|
||
|
B.organ_code AS organ_code
|
||
|
,B.organ_name AS organ_name
|
||
|
,B.comm_id AS comm_id
|
||
|
,B.comm_name AS comm_name
|
||
|
,SUM(A.bzs) AS bzs
|
||
|
,SUM(zzs) AS zzs -- 在职人数
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
A1.pq AS pq
|
||
|
,A1.xm AS xm
|
||
|
,SUM(A1.zzs) AS zzs
|
||
|
,sum(A1.bzs) AS bzs
|
||
|
FROM
|
||
|
(
|
||
|
SELECT
|
||
|
pq -- 片区
|
||
|
,ny
|
||
|
,xm
|
||
|
,SUM(zzs) AS zzs -- 在职数
|
||
|
,SUM(bzs) AS bzs -- 编制数
|
||
|
FROM ods_hr_view_mbl_d
|
||
|
WHERE pq not in('89','267') -- 排除了佳美、悦汇
|
||
|
GROUP BY pq,ny,xm
|
||
|
-- 没有项目的历史数据
|
||
|
-- UNION ALL
|
||
|
-- SELECT
|
||
|
-- organ_code as pq
|
||
|
-- ,concat(left(ym,4),'-',right(ym,2)) as ny
|
||
|
-- ,'' AS xm
|
||
|
-- ,SUM(zzs) AS zzs
|
||
|
-- ,SUM(bzs) AS bzs
|
||
|
-- FROM ods_hr_history_bz_num
|
||
|
-- WHERE 1 = 1
|
||
|
-- GROUP BY ym,organ_code
|
||
|
)A1
|
||
|
WHERE A1.ny = '${p_ym}'
|
||
|
group by A1.pq,A1.xm
|
||
|
)A
|
||
|
RIGHT JOIN
|
||
|
(
|
||
|
SELECT
|
||
|
organ_code -- erp片区编码
|
||
|
,organ_name -- erp片区名称
|
||
|
,hr_organ_id -- hr片区编码
|
||
|
,hr_organ_name -- hr片区名称
|
||
|
,hr_comm_id -- hr项目id
|
||
|
,hr_comm_name -- hr项目名称
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
FROM dim_organ_mapping
|
||
|
WHERE length(hr_comm_id) > 0
|
||
|
GROUP BY
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,hr_organ_id
|
||
|
,hr_organ_name
|
||
|
,hr_comm_id
|
||
|
,hr_comm_name
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
)B
|
||
|
ON A.pq = B.hr_organ_id
|
||
|
AND A.xm = B.hr_comm_id
|
||
|
group by B.organ_code, B.organ_name, B.comm_id, B.comm_name
|
||
|
|
||
|
)
|
||
|
SELECT
|
||
|
count(1) AS CNT
|
||
|
FROM
|
||
|
(
|
||
|
select
|
||
|
a.comm_name as p_area -- 片区/项目
|
||
|
-- organ_name -- 片区名称
|
||
|
-- ,comm_name -- 项目名称
|
||
|
,sum(room_num) as room_num -- 房间总数 【总户数】
|
||
|
,sum(check_ins_num) as check_ins_num -- 入住数 【入住户数】
|
||
|
,case when sum(check_ins_num) = 0
|
||
|
then 0
|
||
|
else sum(check_ins_num) / sum(room_num)
|
||
|
end as occupancy_rate -- 入住率
|
||
|
,SUM(IFNULL(b.zzs,0)) AS zzs -- 在职数
|
||
|
,CASE WHEN sum(check_ins_num) = 0
|
||
|
THEN 0 ELSE SUM(IFNULL(b.zzs,0)) / sum(check_ins_num) END AS zfb -- 住服比
|
||
|
,CASE WHEN SUM(b.bzs) = 0 THEN 0 ELSE SUM(b.zzs) / SUM(b.bzs) END AS full_rate -- 满编率
|
||
|
from
|
||
|
(
|
||
|
SELECT
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
,SUM(room_num) AS room_num
|
||
|
,SUM(check_ins_num) AS check_ins_num
|
||
|
FROM dws_operation_room_park_info_d
|
||
|
WHERE 1 = 1
|
||
|
-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")}
|
||
|
AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL
|
||
|
THEN comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
|
||
|
ELSE ${if(left(fine_role,2)=="项目","comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
|
||
|
|
||
|
group by
|
||
|
organ_code
|
||
|
,organ_name
|
||
|
,comm_id
|
||
|
,comm_name
|
||
|
) a
|
||
|
left join hr_date b
|
||
|
on a.organ_code = b.organ_code
|
||
|
and a.comm_id = b.comm_id
|
||
|
where 1=1
|
||
|
${IF(LEN(p_area)!=0," and a.organ_code IN ('"+JOINARRAY(p_area,"','")+"')","")}
|
||
|
-- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")}
|
||
|
AND CASE WHEN (SELECT mang_project FROM ods_one_to_many_perm WHERE username = '${fine_username}' AND mang_organ IS NULL) IS NOT NULL
|
||
|
THEN a.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
|
||
|
ELSE ${if(left(fine_role,2)=="项目","a.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
|
||
|
|
||
|
group by
|
||
|
a.comm_name
|
||
|
)T
|
||
|
where T.zfb > 0.1
|
||
|
|