Oracle数据库计算占比

计算占比时需要统计全量来求占比

with table_a AS(
SELECT 
  		 CITY AS 地市,COUNTY AS 区县,GRID_NAME AS 网格,
  		 customer_account AS 业务号码,	
  		 boss_order AS BOSS工单号码,	
  		 install_address AS 安装地址,
  		 applicant AS 申请人,	
  		 applicant_date AS 申请时间,	
  		 applicant_reason AS 申请原因,	
  		 apply_kn AS 申请困难场景,	
  		 pro_kn AS 审批困难场景,	
  		 APPLY_STATE_NAME AS 审批状态,	
  		 approval_result AS 审批结果,	
  		 approval_opinion AS 审批描述,
  		 CASE WHEN INSTR(a.approval_opinion, '复杂')>0 THEN '复杂'
  		 WHEN INSTR(a.approval_opinion, '简单')>0 THEN '简单'
  		 ELSE NULL END AS 审核后困难施工场景,
  		 CASE WHEN INSTR(a.applicant_reason, '铺')>0 THEN '是'
  		 ELSE NULL END AS 是否商铺
    FROM a 
WHERE $[to_char(applicant_date, 'YYYY-MM-DD') >= '${开始时间}'] AND $[to_char(applicant_date, 'YYYY-MM-DD') <= '${结束时间}']
) ,
table_tj_nn AS(
  SELECT 地市,COUNT(*) AS 月发起工单,NULL AS 占比,SUM(CASE WHEN 是否商铺='是' THEN 1 ELSE 0 END) AS "其中:商铺",
  COUNT(*) AS "其中:",SUM(CASE WHEN 审批状态='已审批' THEN 1 ELSE 0 END) AS 月已审核工单,
  NULL AS 困难装机审核情况已审核工单占比,
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='通过' THEN 1 ELSE 0 END) AS 未通过,
  NULL AS 困难装机审核情况未通过工单占比,
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' THEN 1 ELSE 0 END) AS 已通过,
  NULL AS 困难装机审核情况已通过工单占比,
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' AND 审核后困难施工场景='复杂' THEN 1 ELSE 0 END) AS "其中:复杂场景",	
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' AND 审核后困难施工场景='简单' THEN 1 ELSE 0 END) AS "其中:简单场景",	
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' AND 审核后困难施工场景 IS NULL THEN 1 ELSE 0 END) AS "其中:未备注场景"
  FROM table_a WHERE 地市='宁' GROUP BY 地市
),
table_tj_result AS (
    SELECT t1.地市, t1.月发起工单, t1.占比, t1."其中:商铺", t1."其中:", t1.月已审核工单,
        ROUND(t1.月已审核工单 / t2."月工单", 9) AS 困难装机审核情况已审核工单占比,
        t1.未通过, ROUND(t1.未通过 / t2."月工单", 9) AS 困难装机审核情况未通过工单占比,
        t1.已通过, ROUND(t1.已通过 / t2."月工单", 9) AS 困难装机审核情况已通过工单占比,
        t1."其中:复杂场景", t1."其中:简单场景", t1."其中:未备注场景"
    FROM table_tj_nn t1
    INNER JOIN (
      SELECT COUNT(*) AS "月工单"
      FROM table_a t2
    ) t2 ON 1=1
)
SELECT a.* FROM table_tj_result a

计算占比时不需要统计全量来求占比

with table_a AS(
SELECT
  		 CITY AS 地市,COUNTY AS 区县,GRID_NAME AS 网格,
  		 customer_account AS 业务号码,
  		 boss_order AS BOSS工单号码,
  		 install_address AS 安装地址,
  		 applicant AS 申请人,
  		 applicant_date AS 申请时间,
  		 applicant_reason AS 申请原因,
  		 apply_kn AS 申请困难场景,
  		 pro_kn AS 审批困难场景,
  		 APPLY_STATE_NAME AS 审批状态,
  		 approval_result AS 审批结果,
  		 approval_opinion AS 审批描述,
  		 CASE WHEN INSTR(a.approval_opinion, '复杂')>0 THEN '复杂'
  		 WHEN INSTR(a.approval_opinion, '简单')>0 THEN '简单'
  		 ELSE NULL END AS 审核后困难施工场景,
  		 CASE WHEN INSTR(a.applicant_reason, '铺')>0 THEN '是'
  		 ELSE NULL END AS 是否商铺
    FROM jk_knzj_diffic_install a
WHERE $[to_char(applicant_date, 'YYYY-MM-DD') >= '${开始时间}'] AND $[to_char(applicant_date, 'YYYY-MM-DD') <= '${结束时间}']
) ,
table_tj_nn AS(
  SELECT 地市,COUNT(*) AS 月发起工单,NULL AS 占比,SUM(CASE WHEN 是否商铺='是' THEN 1 ELSE 0 END) AS "其中:商铺",
  COUNT(*) AS "其中:",SUM(CASE WHEN 审批状态='已审批' THEN 1 ELSE 0 END) AS 月已审核工单,
  NULL AS 困难装机审核情况已审核工单占比,
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='通过' THEN 1 ELSE 0 END) AS 未通过,
  NULL AS 困难装机审核情况未通过工单占比,
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' THEN 1 ELSE 0 END) AS 已通过,
  NULL AS 困难装机审核情况已通过工单占比,
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' AND 审核后困难施工场景='复杂' THEN 1 ELSE 0 END) AS "其中:复杂场景",
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' AND 审核后困难施工场景='简单' THEN 1 ELSE 0 END) AS "其中:简单场景",
  SUM(CASE WHEN 审批状态='已审批' AND 审批结果='不通过' AND 审核后困难施工场景 IS NULL THEN 1 ELSE 0 END) AS "其中:未备注场景"
  FROM table_a WHERE 地市='宁' GROUP BY 地市
),
table_tj_result AS (
    SELECT t1.地市, t1.月发起工单, t1.占比, t1."其中:商铺", t1."其中:", t1.月已审核工单,
        ROUND(t1.月已审核工单 / t2."月工单", 9) AS 困难装机审核情况已审核工单占比,
        t1.未通过, ROUND(t1.未通过 / t2."月工单", 9) AS 困难装机审核情况未通过工单占比,
        t1.已通过, ROUND(t1.已通过 / t2."月工单", 9) AS 困难装机审核情况已通过工单占比,
        t1."其中:复杂场景", t1."其中:简单场景", t1."其中:未备注场景"
    FROM table_tj_nn t1
    INNER JOIN (
      SELECT SUM("其中:") AS "月工单"
      FROM table_tj_nn t2
    ) t2 ON 1=1
)
SELECT a.* FROM table_tj_result a

你可能感兴趣的:(数据库,oracle)