1

以下是我在过去一周中大大简化的查询。它曾经有 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 
4

0 回答 0