我的过程中有以下 sql,但是当我在 Select 中使用 Case 时,它给出了“单行查询返回多行”错误。所以我将查询拆分为多个选择,最后通过合并我上面创建的所有临时表来编写输出。
我使用了 Select 和 Case 但给出错误“单行查询返回多行”。
OUTTAB = SELECT A.MATERIAL,
A.BOM,
A.PARENTBOM,
A.STEPNUM,
B.VALIDFROM AS PARENTBOMFR,
(CASE WHEN B.BOMCOUNT = 1
THEN '99991231'
WHEN B.BOMCOUNT >= 2
THEN (CASE WHEN B.VALIDFROM = (SELECT E.VALIDTO FROM :LT_TEMP1 AS E WHERE A.PARENTBOM = E.BOM)
THEN '99991231'
ELSE ( SELECT TO_DATS(ADD_DAYS(C.VALIDTO, -1)) FROM :LT_TEMP2 AS C
WHERE A.PARENTBOM = C.BOM
AND B.VALIDFROM = (SELECT D.VALIDFROM FROM :LT_TEMP3 AS D WHERE A.PARENTBOM = D.BOM))
END)
ELSE '99991231'
END) AS PARENTBOMTO,
A.COMPONENT,
FROM :INTAB AS A
INNER JOIN :LT_TEMP AS B
ON A.PARENTBOM = B.BOM;
LT_TEMP1,2,3 是为每个级别构建的临时表。
当我在上面运行查询时,我得到“单行查询返回多行”错误。所以我通过加入 INTAB 将 3 个临时表分成一个级别,最后通过所有 3 个临时表的联合写入 OUTTAB。对于系统来说,这似乎是性能密集型的。