leading-project/dw/dws/dws_cost_ac_summary_d.sql
2024-07-21 22:06:45 +08:00

354 lines
14 KiB
SQL

DROP TABLE IF EXISTS dw.dws_cost_ac_summary_d;
CREATE TABLE IF NOT EXISTS dw.dws_cost_ac_summary_d (
yearname VARCHAR(50) COMMENT ''
,monthname VARCHAR(50) COMMENT ''
,organ_code VARCHAR(255) COMMENT '片区ID'
,organ_name VARCHAR(255) COMMENT '片区名称'
,dimsubjectcode VARCHAR(255) COMMENT '组织机构编码'
,dimsubjectname VARCHAR(255) COMMENT '组织机构名称'
,office_rent VARCHAR(255) COMMENT '办公室租金'
,office_repair_fee VARCHAR(255) COMMENT '办公维修费'
,office_fee VARCHAR(255) COMMENT '办公费'
,travel_fee VARCHAR(255) COMMENT '差旅费'
,phone_fee VARCHAR(255) COMMENT '电话费'
,ad_fee VARCHAR(255) COMMENT '广告宣传费'
,business_fee VARCHAR(255) COMMENT '业务接待费'
,water_power_fee VARCHAR(255) COMMENT '水电费'
,management_fee VARCHAR(255) COMMENT '物管费'
,book_fee VARCHAR(255) COMMENT '书报资料费'
,other_fee VARCHAR(255) COMMENT '其他费用'
,total_fee VARCHAR(255) COMMENT '当期小计'
,fee_type VARCHAR(50) COMMENT '费用类型'
)COMMENT = '费控人力成本科目汇总表'
INSERT into dw.dws_cost_ac_summary_d
SELECT
A.yearname AS yearname -- 年
,A.monthname AS monthname -- 月
,A.organ_code AS organ_code -- 片区ID
,A.organ_name AS organ_name -- 片区名称
,A.dimsubjectcode AS dimsubjectcode -- 组织机构编码
,A.dimsubjectname AS dimsubjectname -- 组织机构名称
,SUM(A.salary_fee) AS salary_fee -- 工资
,SUM(A.year_performance_fee) AS year_performance_fee -- 季度/年终绩效
,SUM(A.social_insur_fee) AS social_insur_fee -- 社会保险
,SUM(A.accumu_fund_fee) AS accumu_fund_fee -- 公积金
,SUM(A.liab_insur_fee) AS liab_insur_fee -- 雇主责任险
,SUM(A.smock_fee) AS smock_fee -- 工作服
,SUM(A.train_fee) AS train_fee -- 培训
,SUM(A.recr_fee) AS recr_fee -- 招聘
,SUM(A.emp_bene_fee) AS emp_bene_fee -- 员工福利
,SUM(A.laborrela_fee) AS laborrela_fee -- 劳动关系成本
,SUM(A.other_fee) AS other_fee -- 其他费用
,SUM(A.total_fee) AS total_fee -- 当期小计
,A.fee_type AS fee_type -- 费用类型
FROM
(
SELECT
yearname -- 年
,monthname -- 月
,organ_code -- 片区ID
,organ_name -- 片区名称
,dimsubjectcode -- 组织机构编码
,dimsubjectname -- 组织机构名称
,CASE WHEN dimaccountcode = 'WY040101'
THEN target_fee
ELSE 0 END AS salary_fee -- 工资
,CASE WHEN dimaccountcode = 'WY040102'
THEN target_fee
ELSE 0 END AS year_performance_fee-- 季度/年终绩效
,CASE WHEN dimaccountcode = 'WY040104'
THEN target_fee
ELSE 0 END AS social_insur_fee -- 社会保险
,CASE WHEN dimaccountcode = 'WY040109'
THEN target_fee
ELSE 0 END AS accumu_fund_fee -- 公积金
,CASE WHEN dimaccountcode = 'WY040112'
THEN target_fee
ELSE 0 END AS liab_insur_fee -- 雇主责任险
,CASE WHEN dimaccountcode = 'WY040111'
THEN target_fee
ELSE 0 END AS smock_fee -- 工作服
,CASE WHEN dimaccountcode = 'WY040107'
THEN target_fee
ELSE 0 END AS train_fee -- 培训
,CASE WHEN dimaccountcode = 'WY040110'
THEN target_fee
ELSE 0 END AS recr_fee -- 招聘
,CASE WHEN dimaccountcode = 'WY040103'
THEN target_fee
ELSE 0 END AS emp_bene_fee -- 员工福利
,CASE WHEN dimaccountcode IN('WY040108','') -- 离职员工补偿
THEN target_fee
ELSE 0 END AS laborrela_fee -- 劳动关系成本
,CASE WHEN dimaccountcode in('WY040105','WY040114','WY040106','WY040113') -- 工会经费,残疾人保障金,职工教育经费,汽车费
THEN target_fee
ELSE 0 END AS other_fee -- 其他费用
,target_fee AS total_fee -- 当期小计
,'目标值' AS fee_type -- 费用类型
from dw.dwd_cost_detail_data_d
where cost_code = 'AC' -- 人力成本
UNION ALL
SELECT
yearname -- 年
,monthname -- 月
,organ_code -- 片区ID
,organ_name -- 片区名称
,dimsubjectcode -- 组织机构编码
,dimsubjectname -- 组织机构名称
,CASE WHEN dimaccountcode = 'WY040101'
THEN actual_fee
ELSE 0 END AS salary_fee -- 工资
,CASE WHEN dimaccountcode = 'WY040102'
THEN actual_fee
ELSE 0 END AS year_performance_fee-- 季度/年终绩效
,CASE WHEN dimaccountcode = 'WY040104'
THEN actual_fee
ELSE 0 END AS social_insur_fee -- 社会保险
,CASE WHEN dimaccountcode = 'WY040109'
THEN actual_fee
ELSE 0 END AS accumu_fund_fee -- 公积金
,CASE WHEN dimaccountcode = 'WY040112'
THEN actual_fee
ELSE 0 END AS liab_insur_fee -- 雇主责任险
,CASE WHEN dimaccountcode = 'WY040111'
THEN actual_fee
ELSE 0 END AS smock_fee -- 工作服
,CASE WHEN dimaccountcode = 'WY040107'
THEN actual_fee
ELSE 0 END AS train_fee -- 培训
,CASE WHEN dimaccountcode = 'WY040110'
THEN actual_fee
ELSE 0 END AS recr_fee -- 招聘
,CASE WHEN dimaccountcode = 'WY040103'
THEN actual_fee
ELSE 0 END AS emp_bene_fee -- 员工福利
,CASE WHEN dimaccountcode IN('WY040108','') -- 离职员工补偿
THEN actual_fee
ELSE 0 END AS laborrela_fee -- 劳动关系成本
,CASE WHEN dimaccountcode in('WY040105','WY040114','WY040106','WY040113') -- 工会经费,残疾人保障金,职工教育经费,汽车费
THEN actual_fee
ELSE 0 END AS other_fee -- 其他费用
,actual_fee AS total_fee -- 当期小计
,'实际值' AS fee_type -- 费用类型
from dw.dwd_cost_detail_data_d
where cost_code = 'AC' -- 人力成本
UNION ALL
SELECT
yearname -- 年
,monthname -- 月
,organ_code -- 片区ID
,organ_name -- 片区名称
,dimsubjectcode -- 组织机构编码
,dimsubjectname -- 组织机构名称
,CASE WHEN dimaccountcode = 'WY040101'
THEN diff_amount
ELSE 0 END AS salary_fee -- 工资
,CASE WHEN dimaccountcode = 'WY040102'
THEN diff_amount
ELSE 0 END AS year_performance_fee-- 季度/年终绩效
,CASE WHEN dimaccountcode = 'WY040104'
THEN diff_amount
ELSE 0 END AS social_insur_fee -- 社会保险
,CASE WHEN dimaccountcode = 'WY040109'
THEN diff_amount
ELSE 0 END AS accumu_fund_fee -- 公积金
,CASE WHEN dimaccountcode = 'WY040112'
THEN diff_amount
ELSE 0 END AS liab_insur_fee -- 雇主责任险
,CASE WHEN dimaccountcode = 'WY040111'
THEN diff_amount
ELSE 0 END AS smock_fee -- 工作服
,CASE WHEN dimaccountcode = 'WY040107'
THEN diff_amount
ELSE 0 END AS train_fee -- 培训
,CASE WHEN dimaccountcode = 'WY040110'
THEN diff_amount
ELSE 0 END AS recr_fee -- 招聘
,CASE WHEN dimaccountcode = 'WY040103'
THEN diff_amount
ELSE 0 END AS emp_bene_fee -- 员工福利
,CASE WHEN dimaccountcode IN('WY040108') -- 离职员工补偿
THEN diff_amount
ELSE 0 END AS laborrela_fee -- 劳动关系成本
,CASE WHEN dimaccountcode in('WY040105','WY040114','WY040106','WY040113') -- 工会经费,残疾人保障金,职工教育经费,汽车费
THEN diff_amount
ELSE 0 END AS other_fee -- 其他费用
,diff_amount AS total_fee -- 当期小计
,'差额' AS fee_type -- 费用类型
from dw.dwd_cost_detail_data_d
where cost_code = 'AC' -- 人力成本
)A
GROUP BY
A.yearname
,A.monthname
,A.organ_code
,A.organ_name
,A.dimsubjectcode
,A.dimsubjectname
,A.fee_type
UNION ALL
select
yearname -- 年
,monthname -- 月
,organ_code -- 片区ID
,organ_name -- 片区名称
,dimsubjectcode -- 组织机构编码
,dimsubjectname -- 组织机构名称
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040101'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040101'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040101'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS salary_fee -- 工资
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040102'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040102'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040102'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS year_performance_fee-- 季度/年终绩效
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040104'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040104'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040104'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS social_insur_fee -- 社会保险
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040109'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040109'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040109'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS accumu_fund_fee -- 公积金
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040112'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040112'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040112'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS liab_insur_fee -- 雇主责任险
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040111'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040111'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040111'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS smock_fee -- 工作服
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040107'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040107'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040107'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS train_fee -- 培训
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040110'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040110'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040110'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS recr_fee -- 招聘
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040103'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040103'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040103'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS emp_bene_fee -- 员工福利
,CASE WHEN SUM(CASE WHEN dimaccountcode = 'WY040108'
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode = 'WY040108'
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode = 'WY040108'
THEN target_fee
ELSE 0 END))*100,2),'%') END AS laborrela_fee -- 劳动关系成本
,CASE WHEN SUM(CASE WHEN dimaccountcode in('WY040105','WY040114','WY040106','WY040113')
THEN target_fee
ELSE 0 END) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(CASE WHEN dimaccountcode in('WY040105','WY040114','WY040106','WY040113')
THEN actual_fee
ELSE 0 END) / SUM(CASE WHEN dimaccountcode in('WY040105','WY040114','WY040106','WY040113')
THEN target_fee
ELSE 0 END))*100,2),'%') END AS other_fee -- 其他费用
,CASE WHEN SUM(target_fee) = 0
THEN '0%'
ELSE CONCAT(ROUND((SUM(actual_fee) / SUM(target_fee))*100,2),'%') END AS total_fee -- 当期小计
,'执行率' AS fee_type -- 费用类型
from dw.dwd_cost_detail_data_d
where cost_code = 'AC' -- 人力成本
GROUP BY
yearname -- 年
,monthname -- 月
,organ_code -- 片区ID
,organ_name -- 片区名称
,dimsubjectcode -- 组织机构编码
,dimsubjectname -- 组织机构名称
;