diff --git a/.idea/sqldialects.xml b/.idea/sqldialects.xml index 1c139a9..98b3673 100644 --- a/.idea/sqldialects.xml +++ b/.idea/sqldialects.xml @@ -10,6 +10,7 @@ + @@ -29,6 +30,7 @@ + diff --git a/dw/dim/dim_project_base_info_d.sql b/dw/dim/dim_project_base_info_d.sql index 1395e99..0163dc5 100644 --- a/dw/dim/dim_project_base_info_d.sql +++ b/dw/dim/dim_project_base_info_d.sql @@ -4,6 +4,8 @@ -- 修改内容: 一个项目接管面积会有多个,先累加再关联 -- 修改日期: 2024-09-24 -- 修改内容: 项目对应业态取值规则变更 +-- 修改日期: 2024-10-09 +-- 修改内容: 新增合同到期时间 -- ***************************** select b.CommId @@ -60,6 +62,7 @@ select , a.CommitteeTermStartDate , a.CommitteeTermEndDate , b.DictionaryName AS StateNameNew + , a.ContractEndTime AS ContractEndTime from ( select c.CommId @@ -95,51 +98,52 @@ from ( , c.CityLevel , c.CommitteeTermStartDate , c.CommitteeTermEndDate + , a.ContractEndTime -- 合同结束时间 , sum(TakeOverArea) TakeOverArea , sum(ContractArea) ContractArea , sum(ManageContractArea) ManageContractArea from - ( - select - * - from ods_erp_tb_hspr_projecttakeoverinformation_d - where IsDelete = 0 - ) a - left join - ( - select - ParentId - ,SUM(TakeOverArea) AS TakeOverArea - from ods_erp_tb_hspr_projecttakeoverdetail_d - WHERE IsDelete = 0 - group by - ParentId - ) b - on a.id = b.ParentId - right join (select * from ods_erp_tb_hspr_projectbasicinfomation_d where IsDelete = 0) c - on a.ParentId = c.id - group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33 + ( + select + * + from ods_erp_tb_hspr_projecttakeoverinformation_d + where IsDelete = 0 + ) a + left join + ( + select + ParentId + ,SUM(TakeOverArea) AS TakeOverArea + from ods_erp_tb_hspr_projecttakeoverdetail_d + WHERE IsDelete = 0 + group by + ParentId + ) b + on a.id = b.ParentId + right join (select * from ods_erp_tb_hspr_projectbasicinfomation_d where IsDelete = 0) c + on a.ParentId = c.id + group by 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34 ) a - right join - ( - SELECT - b1.* - ,b2.DictionaryName - FROM - ( - select - * - from ods_erp_tb_hspr_community_d - where IsDelete = 0 - )b1 - LEFT JOIN - (-- add 2024-09-24 项目业态新规则取数 - select - DictionaryCode -- 项目业态编码 - ,DictionaryName -- 项目业态名称 - from ods_erp_tb_dictionary_projectformat_d - )b2 - ON B1.CommKind = b2.DictionaryCode + right join + ( + SELECT + b1.* + ,b2.DictionaryName + FROM + ( + select + * + from ods_erp_tb_hspr_community_d + where IsDelete = 0 + )b1 + LEFT JOIN + (-- add 2024-09-24 项目业态新规则取数 + select + DictionaryCode -- 项目业态编码 + ,DictionaryName -- 项目业态名称 + from ods_erp_tb_dictionary_projectformat_d + )b2 + ON B1.CommKind = b2.DictionaryCode - ) b - on a.CommId = b.CommId \ No newline at end of file + ) b + on a.CommId = b.CommId \ No newline at end of file diff --git a/dw/dwd/dwd_cost_detail_data_d.sql b/dw/dwd/dwd_cost_detail_data_d.sql index 069bd28..bd2c7cc 100644 --- a/dw/dwd/dwd_cost_detail_data_d.sql +++ b/dw/dwd/dwd_cost_detail_data_d.sql @@ -47,7 +47,7 @@ CREATE TABLE IF NOT EXISTS dw.dwd_cost_detail_data_d ( -- ---------------------------------------------------------------------------------------------- - +SELECT * FROM dw.dwd_cost_detail_data_d; truncate dw.dwd_cost_detail_data_d; INSERT into dw.dwd_cost_detail_data_d SELECT diff --git a/dw/dws/dws_operation_subcompany_plan_level_d.sql b/dw/dws/dws_operation_subcompany_plan_level_d.sql index 708aaaa..467de22 100644 --- a/dw/dws/dws_operation_subcompany_plan_level_d.sql +++ b/dw/dws/dws_operation_subcompany_plan_level_d.sql @@ -4,18 +4,23 @@ select , c.subcompanyname , c.supsubcomid , a.plan_level - , count(*) plan_num - , count(plan_name) plan_adjust_num - , sum(case when plan_status = 2 then 1 else 0 end) plan_cancel_num - , sum(case when plan_status = 7 then 1 else 0 end) plan_exempt_assess_num - , sum(case when plan_status = 4 then 1 else 0 end) plan_incomplete_num - , sum(case when left(start_date,7) = left(input_date,7) then 1 else 0 end) plan_thism_num - , sum(case when plan_status = 0 then 1 else 0 end) plan_in_progress_num - , sum(case when plan_status = 1 then 1 else 0 end) plan_complete_num + ,a.plan_name +,a.id +,a.responsible_person1 +,organ_code, organ_name, comm_id, comm_name + , oa_organ_code, oa_organ_name, oa_comm_id, oa_comm_name + -- , count(*) plan_num + -- , count(plan_name) plan_adjust_num + -- , sum(case when plan_status = 2 then 1 else 0 end) plan_cancel_num + -- , sum(case when plan_status = 7 then 1 else 0 end) plan_exempt_assess_num + -- , sum(case when plan_status = 4 then 1 else 0 end) plan_incomplete_num + -- , sum(case when left(start_date,7) = left(input_date,7) then 1 else 0 end) plan_thism_num + -- , sum(case when plan_status = 0 then 1 else 0 end) plan_in_progress_num + -- , sum(case when plan_status = 1 then 1 else 0 end) plan_complete_num from ( SELECT concat(left(trim(start_date),5),lpad(substring_index(substring_index(trim(start_date),'-',2),'-',-1),2,0),right(trim(start_date),3)) start_date, - a.plan_level, + a.plan_level,plan_name, jt.responsible_person1 , a.id, a.plan_status, @@ -26,6 +31,8 @@ from ( cast( CONCAT( '["', REPLACE ( responsible_person1, ',', '","' ), '"]' ) AS json ), "$[*]" COLUMNS ( responsible_person1 INT PATH "$" ) ) AS jt + where a.id in ('17015','17016','17024','17056','17075','17084','29372','29373','29374','29375','29376','29377','29433','29434','29435','29436','29437','29438','29439','29440','29503','29504','29505','29506','29507','29508','29509','29510','29561','29562','29564','29565','29566','29567','29568','29569','29591','29629','29630','40703','42177','42180','42767','42779','42837') + ) a left join ods_oa_hrmresource_d b on a.responsible_person1 = b.id @@ -33,10 +40,16 @@ from ( on b.subcompanyid1 = c.id left join (select distinct plan_name from dwd_operations_plan_adjust_info_d) d on a.id = d.plan_name -WHERE left(a.end_date,7) = '2024-09' -group by - left(a.end_date,7) - , b.subcompanyid1 - , c.subcompanyname - , c.supsubcomid - , a.plan_level \ No newline at end of file + left join (select distinct organ_code, organ_name, comm_id, comm_name + , oa_organ_code, oa_organ_name, oa_comm_id, oa_comm_name from dim_organ_mapping where comm_id is not null) b1 + on b.subcompanyid1 = b1.oa_comm_id + +WHERE left(a.end_date,7) = '2024-10' + +-- AND b.subcompanyid1 in(select distinct oa_comm_id from dim_organ_mapping where comm_id is not null and organ_code = '0108') +-- group by +-- left(a.end_date,7) +-- , b.subcompanyid1 +-- , c.subcompanyname +-- , c.supsubcomid +-- , a.plan_level \ No newline at end of file diff --git a/finereport/kanban/mobile/工程_mobile.sql b/finereport/kanban/mobile/工程_mobile.sql index 32c706f..646a484 100644 --- a/finereport/kanban/mobile/工程_mobile.sql +++ b/finereport/kanban/mobile/工程_mobile.sql @@ -1,5 +1,3 @@ --- 【单位面积能耗同环比】 - select A.organ_code AS organ_code , A.organ_name AS organ_name @@ -9,7 +7,12 @@ select , A.list_ym AS list_ym , A.Dosage AS Dosage , A.Amount AS Amount - ,IF(B.ContractArea = 0,0,A.Dosage / B.ContractArea) AS DOSAGE_PER_SQUARE_METER + , B.StateNameNew AS StateNameNew + ,CASE WHEN StateNameNew = '写字楼' AND MeterType = '水表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS XZL_SHUI + ,CASE WHEN StateNameNew = '写字楼' AND MeterType = '电表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS XZL_DIAN + ,CASE WHEN StateNameNew = '商住' AND MeterType = '水表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS SZ_SHUI + ,CASE WHEN StateNameNew = '商住' AND MeterType = '电表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS SZ_DIAN + ,IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) AS DOSAGE_PER_SQUARE_METER from ( SELECT @@ -22,23 +25,26 @@ from , Dosage , Amount FROM dws_engine_meter_dosage_m - ${IF(p_type = "环比","/*","")} + ${IF(p_type = "环比","/*","")} where 1=1 AND list_ym <> DATE_FORMAT(CURDATE(), '%Y%m') AND list_ym >= '${FORMAT(MONTHDELTA(CONCATENATE(p_ym,"-01"),-60),"yyyyMM")}' ${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} + -- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} + ${IF(LEN(p_shop)!=0," and comm_name IN ('"+JOINARRAY(p_shop,"','")+"')","")} ${IF(LEN(p_ym)>0," AND right(list_ym,2) ='" +right(p_ym,2) + "'","")} and MeterType in ('水表','电表') order by list_ym asc ${IF(p_type = "环比","*/","")} - ${IF(p_type = "环比","","/*")} + ${IF(p_type = "环比","","/*")} where left(list_ym,4) = ${left(p_ym,4)} AND list_ym <> DATE_FORMAT(CURDATE(), '%Y%m') and MeterType in ('水表','电表') ${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} - ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} + -- ${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} + + ${IF(LEN(p_shop)!=0," and comm_name IN ('"+JOINARRAY(p_shop,"','")+"')","")} ORDER BY list_ym ASC ${IF(p_type = "环比","","*/")} )A @@ -46,11 +52,16 @@ from ( select CommId -- 项目id + ,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END AS StateNameNew + ,SUM(FloorArea + UndergroundArea) as totalarea ,SUM(ContractArea) AS ContractArea-- 合同面积(建筑面积) from dim_project_base_info_d GROUP BY - CommId + CommId,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END )B ON A.comm_id = B.CommId -ORDER BY A.list_ym,A.MeterType -; \ No newline at end of file +ORDER BY A.list_ym,A.MeterType \ No newline at end of file diff --git a/finereport/xiazuan/2_operation/计划到期明细.sql b/finereport/xiazuan/2_operation/计划到期明细.sql index 1e9c3fa..1619f33 100644 --- a/finereport/xiazuan/2_operation/计划到期明细.sql +++ b/finereport/xiazuan/2_operation/计划到期明细.sql @@ -18,7 +18,8 @@ with one_to_many AS( WHERE a.username = '${fine_username}' ) select - ${if(len(p_area) == 0,"c.organ_name","c.comm_name")} as p_area + -- ${if(len(p_area) == 0,"c.organ_name","c.comm_name")} as p_area + ${if(len(p_area) == 0,"COALESCE(c.oa_organ_name,e.subcompanyname)","COALESCE(c.oa_comm_name,e.subcompanyname)")} as p_area ,c.oa_comm_id as oa_comm_id -- oa项目id ,c.oa_comm_name as oa_comm_name -- oa项目名称 ,c.oa_organ_code as oa_organ_code -- oa片区id @@ -31,6 +32,7 @@ select ,a.plan_name as plan_name -- 计划名称 ,a.eval_criteria as plan_desc -- 计划内容 ,a.plan_level as plan_level -- 计划等级 + ,a.plan_level_name as plan_level_name -- 计划等级名称 ,left(a.start_date,7) as ym -- 计划开始年月 ,a.start_dt as start_dt -- 计划开始时 ,a.end_date as end_date -- 计划结束时间 @@ -57,12 +59,13 @@ from ,TO_DAYS(a.end_date) - TO_DAYS(curdate()) AS day_diff ,a.eval_criteria -- 评价标准 ,a.executor -- 执行人 + ,case when a.plan_level = 4 then '控股集团级计划' when a.plan_level = 0 then '一级计划' when a.plan_level = 1 then '二级计划' when a.plan_level = 3 then '三级计划' end plan_level_name FROM dw.dwd_operations_plan_info_d a, JSON_TABLE ( cast( CONCAT( '["', REPLACE ( responsible_person1, ',', '","' ), '"]' ) AS json ), "$[*]" COLUMNS ( responsible_person1 INT PATH "$" ) ) AS jt - -- WHERE TO_DAYS(a.end_date) - TO_DAYS(curdate()) <= 3 + -- WHERE TO_DAYS(a.end_date) - TO_DAYS(curdate()) <= 3 -- AND TO_DAYS(a.end_date) - TO_DAYS(curdate()) >= 1 where a.end_date > date_format(CURDATE() - INTERVAL 3 day,'%Y-%m-%d') and a.end_date <= date_format(CURDATE(),'%Y-%m-%d') @@ -93,7 +96,7 @@ from -- where comm_id is not null )c on b.subcompanyid1 = c.oa_comm_id - left join + left join ( select id @@ -103,15 +106,21 @@ from )d on a.executor = d.id + LEFT JOIN + ( + SELECT + * + FROM dw.ods_oa_hrmsubcompany_d -- 分部信息表 + -- WHERE id = '288' + )e + ON b.subcompanyid1 = e.id where 1 = 1 ${if(len(p_startdate) == 0,"","and left(a.end_ym,7) = '" + p_startdate + "'")} - ${IF(LEN(p_area)!=0," and organ_code IN ('"+p_area+"')","")} + ${IF(LEN(p_area)!=0," and coalesce(c.oa_organ_code,e.id) 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 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 - - + THEN COALESCE(c.oa_organ_name,e.subcompanyname) IN (SELECT mang_project FROM one_to_many WHERE username = '${fine_username}') + ELSE ${if(left(fine_role,2)=="项目","COALESCE(c.oa_organ_name,e.subcompanyname) = '"+GETUSERDEPARTMENTS(3)+"'","1=1")} END -- 【筛选框数据集: dic_oa片区】 diff --git a/finereport/xiazuan/4_engine/2_水电能耗明细.sql b/finereport/xiazuan/4_engine/2_水电能耗明细.sql index 2cd34d4..d90e46a 100644 --- a/finereport/xiazuan/4_engine/2_水电能耗明细.sql +++ b/finereport/xiazuan/4_engine/2_水电能耗明细.sql @@ -1,82 +1,214 @@ - +-- 【dic_erp片区】 +with one_to_many_organ AS( + SELECT + a.username AS username -- 用户名 + ,SUBSTRING_INDEX(SUBSTRING_INDEX(a.mang_organ, ',',b.help_topic_id + 1),',',-1) AS mang_organ -- 管理片区 + FROM ods_one_to_many_perm a + JOIN mysql.help_topic b + on b.help_topic_id < (LENGTH(a.mang_organ) - length(replace(a.mang_organ,',','')) + 1) + WHERE a.username = '${fine_username}' +) SELECT DISTINCT organ_code AS 片区id, organ_name AS 片区名称 FROM dw.dws_engine_meter_dosage_m where 1=1 -${if(GETUSERDEPARTMENTS(2)="领悦集团总部","","and organ_name = '"+GETUSERDEPARTMENTS(2)+"'")} +-- ${if(GETUSERDEPARTMENTS(2)="领悦集团总部","","and organ_name = '"+GETUSERDEPARTMENTS(2)+"'")} + AND CASE WHEN (SELECT mang_organ FROM ods_one_to_many_perm WHERE username = '${fine_username}') IS NOT NULL + THEN organ_name IN (SELECT mang_organ FROM one_to_many_organ WHERE username = '${fine_username}') + ELSE ${if(GETUSERDEPARTMENTS(2)!="领悦集团总部","organ_name = '"+GETUSERDEPARTMENTS(2)+"'","1=1")} END - - --- 【能耗环比】 - --- 折线图 -select - list_ym -, MeterType -,SUM(Dosage) /10000 Dosage -- 能耗 -,SUM(Amount) AS Amount-- 能耗金额 -from dw.dws_engine_meter_dosage_m -where 1=1 -and MeterType in ('水表','电表') -AND list_ym < date_format(current_date(),'%Y%m') -and left(list_ym,4) = ${left(p_ym,4)} -${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} -${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} --- ${IF(LEN(P_MeterType)>0," AND MeterType IN ('"+JOINARRAY(P_MeterType,"','")+"')", "")} -GROUP by -list_ym -, MeterType -ORDER BY -list_ym - --- 明细表 - - - - - - --- 【能耗同比】 +-- 【单位面积能耗_环比】 + with one_to_many AS( SELECT - MeterType -, list_ym -,SUM(Dosage) /10000 Dosage -,SUM(Amount) AS Amount -FROM dw.dws_engine_meter_dosage_m -where 1=1 -AND list_ym <> DATE_FORMAT(CURDATE(), '%Y%m') -AND list_ym >= '${FORMAT(MONTHDELTA(CONCATENATE(p_ym,"-01"),-60),"yyyyMM")}' -${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} -${IF(LEN(p_ym)>0," AND right(list_ym,2) ='" +right(p_ym,2) + "'","")} -${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} -and MeterType in ('水表','电表') -group by -MeterType -,list_ym -order by -list_ym +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.organ_code AS organ_code + , A.organ_name AS organ_name + , A.comm_id AS comm_id + , A.comm_name AS comm_name + , A.MeterType AS MeterType + , A.list_ym AS list_ym + , A.Dosage AS Dosage + , A.Amount AS Amount + , B.StateNameNew AS StateNameNew + ,CASE WHEN StateNameNew = '写字楼' AND MeterType = '水表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS XZL_SHUI + ,CASE WHEN StateNameNew = '写字楼' AND MeterType = '电表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS XZL_DIAN + ,CASE WHEN StateNameNew = '商住' AND MeterType = '水表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS SZ_SHUI + ,CASE WHEN StateNameNew = '商住' AND MeterType = '电表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS SZ_DIAN + ,IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) AS DOSAGE_PER_SQUARE_METER +from + ( + SELECT + organ_code + , organ_name + , comm_id + , comm_name + , MeterType + , list_ym + , Dosage + , Amount + FROM dws_engine_meter_dosage_m + WHERE 1=1 + AND MeterType IN ('水表','电表') + AND list_ym < date_format(CURRENT_DATE(),'%Y%m') + ${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + AND LEFT (list_ym,4) = ${left(p_ym,4)} + -- ${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 + )A + LEFT JOIN + ( + select + CommId -- 项目id + ,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END AS StateNameNew + ,SUM(FloorArea + UndergroundArea) as totalarea + ,SUM(ContractArea) AS ContractArea-- 合同面积(建筑面积) + from dim_project_base_info_d + GROUP BY + CommId,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END + )B + ON A.comm_id = B.CommId +ORDER BY A.list_ym,A.MeterType + +-- 【单位面积能耗_同比】 + + 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.organ_code AS organ_code + , A.organ_name AS organ_name + , A.comm_id AS comm_id + , A.comm_name AS comm_name + , A.MeterType AS MeterType + , A.list_ym AS list_ym + , A.Dosage AS Dosage + , A.Amount AS Amount + , B.StateNameNew AS StateNameNew + ,CASE WHEN StateNameNew = '写字楼' AND MeterType = '水表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS XZL_SHUI + ,CASE WHEN StateNameNew = '写字楼' AND MeterType = '电表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS XZL_DIAN + ,CASE WHEN StateNameNew = '商住' AND MeterType = '水表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS SZ_SHUI + ,CASE WHEN StateNameNew = '商住' AND MeterType = '电表' THEN IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea)) ELSE 0 END AS SZ_DIAN + ,IF(B.ContractArea = 0,0,(A.Dosage / B.totalarea))AS DOSAGE_PER_SQUARE_METER +from + ( + SELECT + organ_code + , organ_name + , comm_id + , comm_name + , MeterType + , list_ym + , Dosage + , Amount + FROM dws_engine_meter_dosage_m + WHERE 1=1 + AND list_ym <> DATE_FORMAT(CURDATE(), '%Y%m') + AND list_ym >= '${FORMAT(MONTHDELTA(CONCATENATE(p_ym,"-01"),-60),"yyyyMM")}' + ${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + ${IF(LEN(p_ym)>0," AND right(list_ym,2) ='" +right(p_ym,2) + "'","")} + -- ${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 + + and MeterType in ('水表','电表') + + )A + LEFT JOIN + ( + select + CommId -- 项目id + ,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END AS StateNameNew + ,SUM(FloorArea + UndergroundArea) as totalarea + ,SUM(ContractArea) AS ContractArea-- 合同面积(建筑面积) + from dim_project_base_info_d + GROUP BY + CommId,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END + )B + ON A.comm_id = B.CommId +order by A.list_ym,A.MeterType asc -- 【明细】 + 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 -${if(len(p_area) == 0,"organ_name","comm_name")} as p_area -- 片区/项目 -, MeterType -,SUM(Dosage) Dosage -- 能耗 -,SUM(Amount) AS Amount-- 能耗金额 -from dw.dws_engine_meter_dosage_m -where 1=1 -and MeterType in ('水表','电表') -and list_ym = ${replace(p_ym,'-','')} -${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} -${if(left(fine_role,2)=="项目","and comm_name = '"+GETUSERDEPARTMENTS(3)+"'","")} -${IF(LEN(P_MeterType)>0," AND MeterType IN ('"+JOINARRAY(P_MeterType,"','")+"')", "")} + + ${if(len(p_area) == 0,"A.organ_name","A.comm_name")} as p_area -- 片区/项目 + , A.MeterType AS MeterType + , SUM(A.Dosage) AS Dosage -- 能耗 + , sum(A.Amount) AS Amount -- 金额 + -- , B.StateNameNew AS StateNameNew -- 业态 + ,IF(sum(B.ContractArea) = 0,0,(sum(A.Dosage) / sum(B.totalarea)))AS DOSAGE_PER_SQUARE_METER -- 单位面积能耗 +from + ( + SELECT + organ_code + , organ_name + , comm_id + , comm_name + , MeterType + , list_ym + , Dosage + , Amount + FROM dws_engine_meter_dosage_m + WHERE 1=1 + and MeterType in ('水表','电表') + and list_ym = ${replace(p_ym,'-','')} + ${IF(LEN(p_area)>0," AND organ_code IN ('"+JOINARRAY(p_area,"','")+"')", "")} + ${IF(LEN(P_MeterType)>0," AND MeterType IN ('"+JOINARRAY(P_MeterType,"','")+"')", "")} + )A + LEFT JOIN + ( + select + CommId -- 项目id + ,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END AS StateNameNew + ,SUM(FloorArea + UndergroundArea) as totalarea + ,SUM(ContractArea) AS ContractArea-- 合同面积(建筑面积) + from dim_project_base_info_d + GROUP BY + CommId,CASE WHEN StateNameNew = '写字楼' THEN StateNameNew + ELSE '商住' + END + )B + ON A.comm_id = B.CommId GROUP BY -${if(len(p_area) == 0,"organ_name","comm_name")} - , MeterType - - +${if(len(p_area) == 0,"A.organ_name","A.comm_name")} +, A.MeterType \ No newline at end of file diff --git a/finereport/预警/片区预警数据.sql b/finereport/预警/片区预警数据.sql index 1bd2ad6..81078fc 100644 --- a/finereport/预警/片区预警数据.sql +++ b/finereport/预警/片区预警数据.sql @@ -132,6 +132,7 @@ FROM ,organ_name ,sum(ifnull(pr_paid_cu_amt,0) + ifnull(cu_paid_cu_amt,0) - ifnull(pr_offset_cu_amt,0) - ifnull(cu_offset_cu_amt,0)) / sum(ifnull(cu_receivable_amt,0) + ifnull(pr_exempt_cu_amt,0) + ifnull(cu_exempt_cu_amt,0)) cu_collection_rate ,sum((- ifnull(cu_paid_pr_amt,0) - ifnull(cu_offset_pr_amt,0))) / sum(ifnull(pr_total_receivable_amt,0) + ifnull(pr_total_received_amt,0) + ifnull(cu_early_exempt_pr_amt,0) + ifnull(cu_exempt_pr_amt,0)) pr_collection_rate + ,sum(ifnull(pr_paid_cu_amt,0) + ifnull(cu_paid_cu_amt,0) - ifnull(pr_offset_cu_amt,0) - ifnull(cu_offset_cu_amt,0)- ifnull(cu_offset_pr_amt,0) - ifnull(cu_paid_pr_amt,0)) / sum(ifnull(cu_receivable_amt,0) + ifnull(pr_exempt_cu_amt,0) + ifnull(cu_exempt_cu_amt,0) + ifnull(pr_total_receivable_amt,0) + ifnull(pr_total_received_amt,0) + ifnull(cu_early_exempt_pr_amt,0) + ifnull(cu_exempt_pr_amt,0)) total_collection_rate from dwd_finance_fees_serial_d where ParentCostCode = '0001' and ym = left(current_date,7)