leading-project/finereport/xiazuan/5_manpower/5_在职人员明细.sql

554 lines
18 KiB
MySQL
Raw Normal View History

2024-11-27 11:07:58 +08:00
-- ======================================
-- 年龄分布
-- ======================================
-- 年龄分布
-- 年龄30岁30岁≤年龄40岁40岁≤年龄50岁50岁≤年龄60岁60岁≤年龄65岁年龄≥65岁
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}'
)
SELECT
CASE WHEN A.nl < 30.00 THEN '年龄30岁'
WHEN A.nl >= 30.00 AND A.nl < 40.00 THEN '30岁≤年龄40岁'
WHEN A.nl >= 40.00 AND A.nl < 50.00 THEN '40岁≤年龄50岁'
WHEN A.nl >= 50.00 AND A.nl < 60.00 THEN '50岁≤年龄60岁'
WHEN A.nl >= 60.00 AND A.nl < 65.00 THEN '60岁≤年龄65岁'
WHEN A.nl >= 65.00 THEN '年龄≥65岁'
END AS nld
,count(1) AS sl
FROM
(
SELECT
pq
,xm
,nl
FROM ods_hr_view_zaizhi_user_d
WHERE ny <= '${p_ym}'
AND ny >= '${p_startym}'
)A
LEFT JOIN
(
SELECT
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
FROM dim_organ_mapping
WHERE length(hr_comm_id) > 0
GROUP BY
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'' AS comm_id
,'' AS comm_name
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id
,'领悦集团总部' AS hr_comm_name
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
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 B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
GROUP BY
CASE WHEN nl < 30.00 THEN '年龄30岁'
WHEN nl >= 30.00 AND nl < 40.00 THEN '30岁≤年龄40岁'
WHEN nl >= 40.00 AND nl < 50.00 THEN '40岁≤年龄50岁'
WHEN nl >= 50.00 AND nl < 60.00 THEN '50岁≤年龄60岁'
WHEN nl >= 60.00 AND nl < 65.00 THEN '60岁≤年龄65岁'
WHEN nl >= 65.00 THEN '年龄≥65岁'
END
-- ======================================
-- 司龄分布
-- ======================================
-- 司龄3个月内3个月≤司龄1年1年≤司龄3年3年≤司龄5年5年≤司龄10年10年≤司龄15年司龄≥15年
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}'
)
SELECT
CASE WHEN A.sl < 0.30 THEN '司龄3个月内'
WHEN A.sl >= 0.30 AND A.sl < 1.00 THEN '3个月≤司龄1年'
WHEN A.sl >= 1.00 AND A.sl < 3.00 THEN '1年≤司龄3年'
WHEN A.sl >= 3.00 AND A.sl < 5.00 THEN '3年≤司龄5年'
WHEN A.sl >= 5.00 AND A.sl < 10.00 THEN '5年≤司龄10年'
WHEN A.sl >= 10.00 AND A.sl < 15.00 THEN '10年≤司龄15年'
WHEN A.sl >= 15.00 THEN '司龄≥15年'
END AS sld
,count(1) AS sl
FROM
(
SELECT
pq
,xm
,sl
FROM ods_hr_view_zaizhi_user_d
WHERE ny <= '${p_ym}'
AND ny >= '${p_startym}'
)A
LEFT JOIN
(
SELECT
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
FROM dim_organ_mapping
WHERE length(hr_comm_id) > 0
GROUP BY
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'' AS comm_id
,'' AS comm_name
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id
,'领悦集团总部' AS hr_comm_name
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
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 B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
GROUP BY
CASE WHEN A.sl < 0.30 THEN '司龄3个月内'
WHEN A.sl >= 0.30 AND A.sl < 1.00 THEN '3个月≤司龄1年'
WHEN A.sl >= 1.00 AND A.sl < 3.00 THEN '1年≤司龄3年'
WHEN A.sl >= 3.00 AND A.sl < 5.00 THEN '3年≤司龄5年'
WHEN A.sl >= 5.00 AND A.sl < 10.00 THEN '5年≤司龄10年'
WHEN A.sl >= 10.00 AND A.sl < 15.00 THEN '10年≤司龄15年'
WHEN A.sl >= 15.00 THEN '司龄≥15年'
END
-- ======================================
-- 学历分布
-- ======================================
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}'
)
SELECT
A.xlmc
,count(1) AS sl
FROM
(
SELECT
pq
,xm
,xlmc
FROM ods_hr_view_zaizhi_user_d
WHERE ny <= '${p_ym}'
AND ny >= '${p_startym}'
)A
LEFT JOIN
(
SELECT
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
FROM dim_organ_mapping
WHERE length(hr_comm_id) > 0
GROUP BY
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'' AS comm_id
,'' AS comm_name
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id
,'领悦集团总部' AS hr_comm_name
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
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 B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
GROUP BY
A.xlmc
-- ======================================
-- 职务角色
-- ======================================
-- 总部职能中心/一级部门负责人及以上人员
-- 总部二级职能部门负责人
-- 片区负责人
-- 片区职能部门负责人
-- 项目负责人
-- 项目部门负责人
-- 案场负责人
-- 案场部门负责人
-- 员工
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}'
)
SELECT
zwmc AS zwje
,count(1) AS sl
FROM
(
SELECT
pq
,xm
,zwmc
FROM ods_hr_view_zaizhi_user_d
WHERE ny <= '${p_ym}'
AND ny >= '${p_startym}'
)A
LEFT JOIN
(
SELECT
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
FROM dim_organ_mapping
WHERE length(hr_comm_id) > 0
GROUP BY
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'' AS comm_id
,'' AS comm_name
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id
,'领悦集团总部' AS hr_comm_name
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
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 B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
GROUP BY
A.zwmc
-- ======================================
-- 职务层级
-- ======================================
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}'
)
SELECT
A.zycjname
,count(1) AS sl
FROM
(
SELECT
pq
,xm
,zycjname
FROM ods_hr_view_zaizhi_user_d
WHERE ny <= '${p_ym}'
AND ny >= '${p_startym}'
)A
LEFT JOIN
(
SELECT
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
FROM dim_organ_mapping
WHERE length(hr_comm_id) > 0
GROUP BY
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'' AS comm_id
,'' AS comm_name
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id
,'领悦集团总部' AS hr_comm_name
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
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 B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
GROUP BY
A.zycjname
-- ======================================
-- 一级专业条线
-- ======================================
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}'
)
SELECT
A.zytxmc
,count(1) AS sl
FROM
(
SELECT
pq
,xm
,zytxmc
FROM ods_hr_view_zaizhi_user_d
WHERE ny <= '${p_ym}'
AND ny >= '${p_startym}'
)A
LEFT JOIN
(
SELECT
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
FROM dim_organ_mapping
WHERE length(hr_comm_id) > 0
GROUP BY
organ_code
,organ_name
,comm_id
,comm_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'' AS comm_id
,'' AS comm_name
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id
,'领悦集团总部' AS hr_comm_name
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
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 B.comm_name IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}')
ELSE ${if(left(fine_role,2)=="项目","B.comm_name = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END
GROUP BY
A.zytxmc
-- ======================================
-- 人员明细
-- ======================================
SELECT
A.pq AS pq -- 片区
,B.hr_organ_name AS hr_organ_name
,A.xm AS xm -- 项目
,B.hr_comm_name AS hr_comm_name
,A.bm AS bm -- 部门id
,A.bmmc AS bmmc -- 部门名称
,A.gwid AS gwid -- 岗位id
,A.gwmc AS gwmc -- 岗位名称
,A.id AS id -- 人员id
,A.workcode AS workcode -- 工号
,A.lastname AS lastname -- 姓名
,A.nl AS nl -- 年龄
,A.sl AS sl -- 司龄
,A.zwid AS zwid -- 职务角色id
,A.zwmc AS zwmc -- 职务角色名称
,A.zytxid AS zytxid -- 专业条线id
,A.zytxmc AS zytxmc -- 专业条线名称
,A.zycjid AS zycjid -- 职员层级id
,A.zycjname AS zycjname -- 职员层级名称
FROM
(
SELECT
pq -- 片区
,xm -- 项目
,bm -- 部门id
,bmmc -- 部门名称
,gwid -- 岗位id
,gwmc -- 岗位名称
,id -- 人员id
,workcode -- 工号
,lastname -- 姓名
,nl -- 年龄
,sl -- 司龄
,zwid -- 职务角色id
,zwmc -- 职务角色名称
,zytxid -- 专业条线id
,zytxmc -- 专业条线名称
,zycjid -- 职员层级id
,zycjname -- 职员层级名称
FROM ods_hr_view_zaizhi_user_d
WHERE LEFT(ny,7) = '${p_ym}'
)A
LEFT 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项目名称
FROM dim_organ_mapping
GROUP BY
organ_code
,organ_name
,hr_organ_id
,hr_organ_name
,hr_comm_id
,hr_comm_name
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'' AS organ_name -- erp片区名称
,'153' AS hr_organ_id -- hr片区编码
,'领悦集团总部' AS hr_organ_name -- hr片区名称
,'153' AS hr_comm_id -- hr项目id
,'领悦集团总部' AS hr_comm_name -- hr项目名称
FROM dual
)B
ON A.pq = B.hr_organ_id
and A.xm = b.hr_comm_id
where 1 = 1
${IF(LEN(p_area)>0," AND B.organ_code IN ('"+ p_area +"')", "")}
-- ======================================
-- 使用ods_hr_view_zaizhi_user_d表计算人员分布占比
-- ======================================