以下是我在过去一周中大大简化的查询。它曾经有 7 个其他连接,但现在它们被合并到两个临时表中,因此显然不是复杂连接导致错误。但它仍然在 Netezza 中大约 75% 的时间引发“内存不足”错误,即使在 Aginity 的新 Windows 任务(我们在 Windows 中的 Netezza IDE)分配新内存时也是如此。重写此查询以完全避免 CASE 语句的最有效方法是什么?实际的查询有十几个 WHEN 子句,但为了简单起见,我删除了其中的许多子句来编写这个问题。
INSERT INTO SRC_ENC
(
ENC_DATE,
ENC_TYPE,
ENC_NUM
)
SELECT
TE.ENC_DT AS ENC_DATE,
CASE
WHEN
TE.ARRIVAL_DT IS NOT NULL
AND TE.ADMIT_DT IS NOT NULL
THEN 'X1'
WHEN
TE.ARRIVAL_DT IS NOT NULL
AND TE.ADMIT_DT IS NULL
THEN 'X2'
WHEN
(
TE.ADMIT_DT = TE.DISCH_DT
AND INT4(TE.TYPE_CD) IN (3,104,126,501)
)
OR
INT4(TE.TYPE_CD) = 104
THEN 'X4'
WHEN
DEP.UNIT_TYPE = 2
THEN 'X5'
ELSE 'X0'
END AS ENC_TYPE,
TE.ENC_ID AS ENC_NUM
FROM
TEMP_ENC TE
LEFT JOIN TEMP_DEP DEP ON TE.DEPT_ID = DEP.DEPT_ID
GROUP BY
ENC_DATE,
ENC_TYPE,
ENC_NUM