IT-例子 2024-02-02 17:11 采纳率: 0%
浏览 12

Oracle数据库SQL语句优化

如何优化这个SQL语句:
这个SQL语句在【ROW_NUMBER() OVER (PARTITION BY 编码 ORDER BY CASE WHEN INSTR(a.新网格, 区域) > 0 then 2 else 1 end DESC,LENGTH(小区关键字) DESC) AS 去重参考】查询的时候变得很慢了;我应该怎么解决这个问题呢;请各位之下招,非常感谢

WITH table_xd AS(
 SELECT * FROM install_form_view WHERE 地市 = '梧州' AND 产品 = '宽带' AND 所属WG IS NOT NULL
),
table_a AS (
  SELECT a.*,
  CASE 
       WHEN INSTR(a.区县, '山') > 0 THEN ''
       WHEN INSTR(a.区县, '藤') > 0 THEN ''
       WHEN INSTR(a.区县, '溪') > 0 THEN '溪山'
       WHEN INSTR(a.区县, '苍') > 0 OR INSTR(a.区县, '龙') > 0 THEN '苍龙'
       WHEN INSTR(a.区县, '长洲') > 0 OR INSTR(a.区县, '万') > 0 THEN '城区'
       ELSE '其它'
    END AS 区域,
  CASE WHEN a.所属WG='网格信息为空' then b.营销网格 else a.所属WG end AS 新网格,
  CASE WHEN LENGTH(b.小区)>0 THEN b.小区 ELSE a.小区 end AS 小区关键字
  FROM table_xd a
  left JOIN (SELECT * FROM wz_basic_info_view GROUP BY 资源标识,小区,CUID,标准地址,营销网格) b ON a.标准地址 LIKE '%' || b.小区 || '%'
),
table_b AS (
  SELECT a.*,
  ROW_NUMBER() OVER (PARTITION BY 施工单编码 ORDER BY CASE WHEN INSTR(a.新网格, 区域) > 0 then 2 else 1 end DESC,LENGTH(小区关键字) DESC) AS 去重参考,
  CASE 
        WHEN a.新网格 = '新圩网格' THEN 2
        WHEN a.新网格 = '陈塘网格' THEN 3
        WHEN a.新网格 = '大隆网格' OR a.新网格 = '水汶网格' OR a.新网格 = '文圩网格' THEN 4
        WHEN a.新网格 = '大黎网格' OR a.新网格 = '琅南网格' OR a.新网格 = '象棋网格' THEN 5
        WHEN a.新网格 = '塘步网格' OR a.新网格 = '糯安网格' OR a.新网格 = '筋诚网格' OR a.新网格 = '岭京网格' THEN 6
        WHEN a.新网格 = '金鸡网格' OR a.新网格 = '三塘网格' THEN 7
        WHEN a.新网格 ='归义网格' THEN 9
        WHEN a.新网格 = '城区富民网格' OR a.新网格 = '城区中山网格' OR a.新网格 = '濛江网格' OR a.新网格 = '南马网格' THEN 10
        WHEN a.新网格 = '旺木网格' OR a.新网格 = '县城网格' THEN 11
        WHEN a.新网格 = '城区三云网格' OR a.新网格 = '大广新网格' THEN 12
        WHEN a.新网格 ='河西网格' THEN 13
        WHEN a.新网格 = '太平网格'OR a.新网格 = '新县城网格' THEN 14
        WHEN a.新网格 = '城区新兴网格'OR a.新网格 = '城区长洲网格' THEN 15
        WHEN a.新网格 = '城区新兴三网格' OR a.新网格 = '城东网格' THEN 17
        WHEN a.新网格 ='河东网格' THEN 18
        WHEN a.新网格 ='城西网格' THEN 19
        WHEN a.新网格 ='县城网格' THEN 22
        ELSE 0
    END AS 日归档目标值,
  CASE 
      WHEN a.新网格 = '新圩网格' then 70 
    WHEN a.新网格 = '陈塘网格' then 89 
    WHEN a.新网格 = '旺木网格' then 126
    WHEN a.新网格 = '文圩网格' then 128
    WHEN a.新网格 = '大黎网格' then 132
    WHEN a.新网格 = '象棋网格' then 159
    WHEN a.新网格 = '琅南网格' then 163
    WHEN a.新网格 = '筋诚网格' then 168
    WHEN a.新网格 = '糯安网格' then 170
    WHEN a.新网格 = '大隆网格' OR a.新网格 = '水汶网格' then 174
    WHEN a.新网格 = '塘步网格' then 179
    WHEN a.新网格 = '三塘网格' then 181
    WHEN a.新网格 = '归义网格' then 182
    WHEN a.新网格 = '城区中山网格' OR a.新网格 = '金鸡网格' then 199
    WHEN a.新网格 = '南马网格' then 202
    WHEN a.新网格 = '岭京网格' then 210
    WHEN a.新网格 = '城区富民网格' then 230
    WHEN a.新网格 = '大广新网格' then 241
    WHEN a.新网格 = '濛江网格' then 279
    WHEN a.新网格 = '县城网格' then 303
    WHEN a.新网格 = '河西网格' then 331
    WHEN a.新网格 = '城区长洲网格' then 332
    WHEN a.新网格 = '城区新兴网格' then 420
    WHEN a.新网格 = '太平网格' then 437
    WHEN a.新网格 = '河东网格' then 443
    WHEN a.新网格 = '新县城网格' then 471
    WHEN a.新网格 = '城区三云网格' then 476
    WHEN a.新网格 = '城区新兴三网格' then 550
    WHEN a.新网格 = '城东网格' then 568
    WHEN a.新网格 = '县城网格' then 584
    WHEN a.新网格 = '城西网格' then 616
       ELSE 0 
  END AS 月归档目标值
  FROM table_a a
),
table_tj AS(
 SELECT 区域,新网格 AS 所属WG,
  SUM(CASE 
        WHEN $[to_char(受理时间, 'YYYY-MM-DD') = '${结束时间}']
              AND 工单类型 = '装' AND 产品 = '宽带' AND 校园='否'
      -- 匹配业务号
      AND 业务号 NOT IN(
        SELECT 业务号 FROM table_b WHERE 去重参考 = 1 AND $[to_char(受理时间, 'YYYY-MM-DD') >= '${开始时间}'] AND $[to_char(受理时间, 'YYYY-MM-DD') < '${结束时间}']           
       )
      THEN 1 ELSE 0 
 END) AS 当日下单,
  SUM(CASE 
        WHEN $[to_char(归档时间, 'YYYY-MM-DD') = '${结束时间}']
              AND 工单类型 = '装' AND 产品 = '宽带' AND 校园='否'AND 状态='已归档' THEN 1 ELSE 0 
 END) AS 当日竣工,
  日归档目标值,
  SUM(CASE WHEN 产品 = '宽带' AND 工单类型 = '装' AND 状态 NOT IN ('已归档','已撤单','已退单') then 1 else 0 end) AS 在途工单,
  SUM(CASE 
    WHEN $[to_char(受理时间, 'YYYY-MM-DD') >= '${开始时间}'] AND $[to_char(受理时间, 'YYYY-MM-DD') < '${结束时间}']
        AND 工单类型 = '装' AND 产品 = '宽带' AND 校园 = '否'
        THEN 1 ELSE 0 
    END) AS 当月下单,
  SUM(CASE 
        WHEN $[to_char(归档时间, 'YYYY-MM-DD') >= '${开始时间}'] AND $[to_char(归档时间, 'YYYY-MM-DD') <= '${结束时间}']
              AND 工单类型 = '装' AND 产品 = '宽带' AND 校园='否' AND 状态='已归档' THEN 1 ELSE 0 
 END) AS 当月竣工,
  月归档目标值
  FROM table_b WHERE 去重参考 = 1
  GROUP BY 区域,新网格,日归档目标值,月归档目标值
)
SELECT 区域,所属WG,当日下单,当日竣工,日归档目标值, 
CASE WHEN main."当日竣工" <> 0 THEN ROUND(main."当日竣工"/NULLIF(main."日归档目标值",0),2) else 0 end AS 日完成率,
在途工单,当月下单,当月竣工,月归档目标值,
CASE WHEN main."当月竣工" <> 0 THEN ROUND(main."当月竣工"/NULLIF(main."月归档目标值",0),2) else 0 end AS 月完成率,
CASE WHEN main."当月竣工" <> 0 THEN ROUND(main."当月竣工"/EXTRACT(DAY FROM SYSDATE),0) else 0 end AS 当月日均竣工
FROM table_tj main WHERE LENGTH(所属WG)>0 
ORDER BY 
  CASE 区域
    WHEN '城区' THEN 1
    WHEN '' THEN 2
    WHEN '' THEN 3
    WHEN '' THEN 4
    WHEN '' THEN 5
    ELSE 6
  END
  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-02-02 20:11
    关注

    【相关推荐】




    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    评论

报告相同问题?

问题事件

  • 创建了问题 2月2日

悬赏问题

  • ¥20 python爬虫遇到空文本取不出来
  • ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
  • ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
  • ¥20 关于web前端如何播放二次加密m3u8视频的问题
  • ¥15 使用百度地图api 位置函数报错?
  • ¥15 metamask如何添加TRON自定义网络
  • ¥66 关于川崎机器人调速问题
  • ¥15 winFrom界面无法打开
  • ¥30 crossover21 ARM64版本安装软件问题
  • ¥15 mymetaobjecthandler没有进入