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

687 lines
18 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

-- ======================================
-- 年龄分布
-- ======================================
SELECT
nld
,sum(sl) AS sl
FROM
(
SELECT
zb -- 总部
,pq -- 片区
,xm -- 项目
,nld -- 年龄段
,sl -- 数量
FROM ods_hr_view_nld_d
)A
LEFT JOIN
(
SELECT
organ_code
,hr_organ_id
,hr_comm_id
FROM dim_organ_mapping
GROUP BY
organ_code
,hr_organ_id
,hr_comm_id
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'153' AS hr_organ_id -- hr片区编码
,'153' AS hr_comm_id -- hr项目id
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 ('"+JOINARRAY(p_area,"','")+"')", "")}
GROUP BY nld
-- 年龄分布
-- 年龄30岁30岁≤年龄40岁40岁≤年龄50岁50岁≤年龄60岁60岁≤年龄65岁年龄≥65岁
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 -- 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
WHERE length(hr_comm_id) > 0
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 +"')", "")}
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
-- ======================================
-- 司龄分布
-- ======================================
SELECT
sld
,sum(sl) AS sl
FROM
(
SELECT
zb -- 总部
,pq -- 片区
,xm -- 项目
,sld -- 司龄段
,sl -- 数量
FROM ods_hr_view_sld_d
)A
LEFT JOIN
(
SELECT
organ_code
,hr_organ_id
,hr_comm_id
FROM dim_organ_mapping
GROUP BY
organ_code
,hr_organ_id
,hr_comm_id
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'153' AS hr_organ_id -- hr片区编码
,'153' AS hr_comm_id -- hr项目id
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 ('"+JOINARRAY(p_area,"','")+"')", "")}
GROUP BY sld
-- 司龄3个月内3个月≤司龄1年1年≤司龄3年3年≤司龄5年5年≤司龄10年10年≤司龄15年司龄≥15年
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 -- 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
WHERE length(hr_comm_id) > 0
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 +"')", "")}
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
-- ======================================
-- 学历分布
-- ======================================
SELECT
xl
,sum(sl) AS sl
FROM
(
SELECT
zb -- 总部
,pq -- 片区
,xm -- 项目
,xl -- 学历
,sl -- 数量
FROM ods_hr_view_xl_d
)A
LEFT JOIN
(
SELECT
organ_code
,hr_organ_id
,hr_comm_id
FROM dim_organ_mapping
GROUP BY
organ_code
,hr_organ_id
,hr_comm_id
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'153' AS hr_organ_id -- hr片区编码
,'153' AS hr_comm_id -- hr项目id
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 ('"+JOINARRAY(p_area,"','")+"')", "")}
GROUP BY xl
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 -- 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
WHERE length(hr_comm_id) > 0
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 +"')", "")}
GROUP BY
A.xlmc
-- ======================================
-- 职务角色
-- ======================================
SELECT
zwje
,sum(sl) AS sl
FROM
(
SELECT
zb -- 总部
,pq -- 片区
,xm -- 项目
,zwje -- 职务角色
,sl -- 数量
FROM dw.ods_hr_view_zwjs_d
)A
LEFT JOIN
(
SELECT
organ_code
,hr_organ_id
,hr_comm_id
FROM dim_organ_mapping
GROUP BY
organ_code
,hr_organ_id
,hr_comm_id
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'153' AS hr_organ_id -- hr片区编码
,'153' AS hr_comm_id -- hr项目id
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 ('"+JOINARRAY(p_area,"','")+"')", "")}
GROUP BY zwje
-- 总部职能中心/一级部门负责人及以上人员
-- 总部二级职能部门负责人
-- 片区负责人
-- 片区职能部门负责人
-- 项目负责人
-- 项目部门负责人
-- 案场负责人
-- 案场部门负责人
-- 员工
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 -- 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
WHERE length(hr_comm_id) > 0
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 +"')", "")}
GROUP BY
A.zwmc
-- ======================================
-- 职务层级
-- ======================================
SELECT
swtx
,sum(sl) AS sl
FROM
(
SELECT
zb -- 总部
,pq -- 片区
,xm -- 项目
,swtx -- 职务层级
,sl -- 数量
FROM dw.ods_hr_view_swtx_d
)A
LEFT JOIN
(
SELECT
organ_code
,hr_organ_id
,hr_comm_id
FROM dim_organ_mapping
GROUP BY
organ_code
,hr_organ_id
,hr_comm_id
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'153' AS hr_organ_id -- hr片区编码
,'153' AS hr_comm_id -- hr项目id
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 ('"+JOINARRAY(p_area,"','")+"')", "")}
GROUP BY swtx
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 -- 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
WHERE length(hr_comm_id) > 0
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 +"')", "")}
GROUP BY
A.zycjname
-- ======================================
-- 一级专业条线
-- ======================================
SELECT
zytx
,sum(sl) AS sl
FROM
(
SELECT
zb -- 总部
,pq -- 片区
,xm -- 项目
,zytx -- 一级专业条线
,sl -- 数量
FROM dw.ods_hr_view_zytx_d
)A
LEFT JOIN
(
SELECT
organ_code
,hr_organ_id
,hr_comm_id
FROM dim_organ_mapping
GROUP BY
organ_code
,hr_organ_id
,hr_comm_id
UNION ALL
SELECT
'0000' AS organ_code -- erp片区编码
,'153' AS hr_organ_id -- hr片区编码
,'153' AS hr_comm_id -- hr项目id
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 ('"+JOINARRAY(p_area,"','")+"')", "")}
GROUP BY zytx
;
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 -- 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
WHERE length(hr_comm_id) > 0
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 +"')", "")}
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表计算人员分布占比
-- ======================================