SQL server 数据库里 写了一个sql 最后的数据集 执行出来 需要 很长时间 三四分钟 其实 就只有 8000多条数据 请大佬看一下 这个 sql 可不可以优化一下 提高一下 查询效率
WITH GA AS (SELECT DISTINCT DESIGNKCODE,BEXTSTR1 AS EXTSTR1,YEAR,BIG_TYPE,mc_fl1,COST FROM DW_product020 WHERE BEXTSTR1 IS NOT NULL --九光档案表处理 GB AS ( --找出 档案表中 顶层码一样 成本不一样的数据 GC AS (SELECT --在总表过滤掉 顶层码一样 成本不一样的数据 GD AS (SELECT * FROM GB WHERE DESIGNKCODE NOT IN (SELECT DISTINCT DESIGNKCODE FROM GC)), --将 顶层码一样 成本不一样的这部分 数据 不一样的成本 取最小值 GE AS (select a.DESIGNKCODE ,a.EXTSTR1,a.bm,a.YEAR,b.Mcost as kcost,a.pp,a.MC_FL1 --将以过滤的数据 与 源数据放到一起 GF AS (SELECT * FROM GD --静态表 与 档案表 表关联 GG AS (SELECT GF.designkcode AS DESIGNKCODE_I,GF.ExtStr1 AS EXTSTR1_I,GF.YEAR AS YEAR_I,GF.MC_FL1 AS MC_FL1_I,GF.Kcost,GA.designkcode,GA.ExtStr1,GA.YEAR,GA.MC_FL1,GA.COST FROM --过滤掉静态表designkcode为空的数据 GH AS (SELECT * FROM GG WHERE DESIGNKCODE IS NOT NULL), --静态表DESIGNKCODE为空的所有档案表的数据 第一部分的模块 GI AS (SELECT DESIGNKCODE_I AS DESIGNKCODE,EXTSTR1_I AS EXTSTR1,YEAR_I AS YEAR,MC_FL1_I MC_FL1,KCOST AS COST FROM GG WHERE DESIGNKCODE IS NULL), --静态表 没有关联上 档案表的数据(档案表所有的数据已经关联进去了) 第二部分的模块 GJ AS (SELECT DESIGNKCODE,EXTSTR1,YEAR,MC_FL1,COST FROM GA WHERE NOT EXISTS ( --顶层码一致 但是 成本不一致的数据 GK AS ( --将成本不同的数据 以 GB的成本 为标准同化GA的成本数据 GL AS (SELECT *,(CASE WHEN KCOST <> COST THEN KCOST ELSE COST END) AS COST_I FROM GK), --取出以GB成本为标准的数据 第三部分的模块 GM AS (SELECT DESIGNKCODE_I AS DESIGNKCODE,EXTSTR1_I AS EXTSTR1,YEAR_I AS YEAR,MC_FL1_I AS MC_FL1,KCOST AS COST FROM GL), --取出 非 顶层码一致 但是 成本不一致的数据 第四部分的模块 GP AS (select DESIGNKCODE_I AS DESIGNKCODE,EXTSTR1_I AS EXTSTR1,YEAR_I AS YEAR,MC_FL1_I AS MC_FL1,KCOST AS COST FROM GH WHERE DESIGNKCODE_I NOT IN (SELECT DISTINCT DESIGNKCODE_I FROM GK)), --将前边的几个模块组合 GQ AS (SELECT * FROM GI SELECT * FROM GQ 这个结果集 是静态表的designkcode数 这个 结果集 是 关联的结果集里的 静态表的designkcode数 |