优化这段代码SELECT O.YEAR,--创建日期年度 O.MATNR,--物料 O.EKORG,--采购组织 O.LIFNR,--供应商 MAX(O.XXDATE) AS XXDATE FROM ( (select DISTINCT C.YEAR,--创建日期年度 B.MATNR,--物料 A.EKORG,--采购组织 B.LIFNR,--供应商 MIN(A.ERDAT) AS XXDATE--同年度取最小年度 FROM "SAPS4"."EINE" as A LEFT JOIN "SAPS4"."EINA" as B ON A.INFNR = B.INFNR--信息记录标识 LEFT JOIN "_SYS_BI"."M_TIME_DIMENSION_YEAR" AS C ON LEFT(A.ERDAT,4)<=C.YEAR where C.YEAR=LEFT(A.ERDAT,4) --创建日期 and C.YEAR='2023' and A.EKORG in ('2000','2100') GROUP BY C.YEAR,--创建日期年度 B.MATNR,--物料 A.EKORG, --采购组织 B.LIFNR --供应商 ORDER BY C.YEAR,--创建日期年度 B.MATNR,--物料 A.EKORG,--采购组织 B.LIFNR--供应商 ) UNION ALL ( select DISTINCT C.YEAR,--创建日期年度 B.MATNR,--物料 A.EKORG,--采购组织 B.LIFNR,--供应商 MAX(A.ERDAT) AS XXDATE--同年度取最小年度 FROM "SAPS4"."EINE" as A LEFT JOIN "SAPS4"."EINA" as B ON A.INFNR = B.INFNR--信息记录标识 LEFT JOIN "_SYS_BI"."M_TIME_DIMENSION_YEAR" AS C ON LEFT(A.ERDAT,4)<=C.YEAR where C.YEAR<>LEFT(A.ERDAT,4) --创建日期 and C.YEAR='2023' and A.EKORG in ('2000','2100') GROUP BY C.YEAR,--创建日期年度 B.MATNR,--物料 A.EKORG, --采购组织 B.LIFNR --供应商 ORDER BY C.YEAR,--创建日期年度 B.MATNR,--物料 A.EKORG,--采购组织 B.LIFNR--供应商
时间: 2024-04-19 12:30:09 浏览: 195
这段代码可以进行一些优化,主要是在使用UNION ALL时可以将两个子查询合并成一个,避免重复的查询操作。另外,可以将DISTINCT关键字去掉,因为GROUP BY已经可以确保结果的唯一性。
以下是优化后的代码:
SELECT
C.YEAR, -- 创建日期年度
B.MATNR, -- 物料
A.EKORG, -- 采购组织
B.LIFNR, -- 供应商
MAX(CASE WHEN C.YEAR = LEFT(A.ERDAT, 4) THEN A.ERDAT ELSE NULL END) AS XXDATE
FROM
"SAPS4"."EINE" AS A
LEFT JOIN "SAPS4"."EINA" AS B ON A.INFNR = B.INFNR -- 信息记录标识
LEFT JOIN "_SYS_BI"."M_TIME_DIMENSION_YEAR" AS C ON LEFT(A.ERDAT,4) <= C.YEAR
WHERE
C.YEAR = '2023' -- 创建日期
AND A.EKORG IN ('2000','2100')
GROUP BY
C.YEAR, -- 创建日期年度
B.MATNR, -- 物料
A.EKORG, -- 采购组织
B.LIFNR -- 供应商
ORDER BY
C.YEAR, -- 创建日期年度
B.MATNR, -- 物料
A.EKORG, -- 采购组织
B.LIFNR -- 供应商
这样可以避免重复查询和排序,提高查询效率。
阅读全文