HIVEQL和Talend中子查询之间的NVL

HIVEQL和Talend中子查询之间的NVL,hive,hiveql,talend,nvl,Hive,Hiveql,Talend,Nvl,当它们之间存在子查询时,是否可以调用nvl?代码如下 NVL( ( SELECT MIN(DATE_TIME)AS EFFECTIVE_DATE FROM TEMP.DM_ZEXPIDA_FICANT Z WHERE REGEXP_EXTRACT(CURR_HC,'([^;]+)',0) = TEMP.AB_FICANT.CURR_CODE

当它们之间存在子查询时,是否可以调用nvl?代码如下

     NVL(
            (
            SELECT
            MIN(DATE_TIME)AS EFFECTIVE_DATE
            FROM TEMP.DM_ZEXPIDA_FICANT Z
            WHERE REGEXP_EXTRACT(CURR_HC,'([^;]+)',0)  = TEMP.AB_FICANT.CURR_CODE
            AND Z.DATE_TIME                            > TEMP.AB_FICANT.DATE_TIME
            ),
            (
            SELECT
            MIN(DATE_TIME)AS EFFECTIVE_DATE
            FROM TEMP.DM_ZEXPIDB_FICANT Z
            WHERE CURR_CODE = TEMP.AB_FICANT.CURR_CODE
            AND Z.DATE_TIME > TEMP.AB_FICANT.DATE_TIME
            ) 
    )AS EXPI_DATE,
正如我们所知,系统限制我们在选择内进行选择:

此外,只有当表单如下所示时,我们才能使用CASE:

CASE WHEN rr IS NULL THEN kk
ELSE rr 
END AS EXPI_DATE

我必须尝试哪种形式才能成功完成此操作?

假设TEMP.AB\FICANT.KEY\u COL作为我在SQL下面创建的驱动表中的键。两个子查询都转换为左联接。现在,如果您没有键列,您可以在某个列上进行连接,该列在函数中是唯一的

SELECT NVL( A.EFFECTIVE_DATE, B.EFFECTIVE_DATE) AS EXPI_DATE
    FROM TEMP.AB_FICANT DRIV
    LEFT JOIN (
            SELECT
            MIN(DATE_TIME)AS EFFECTIVE_DATE, INNER_DRIV.KEY_COL
            FROM TEMP.DM_ZEXPIDA_FICANT Z, TEMP.AB_FICANT INNER_DRIV
            WHERE REGEXP_EXTRACT(Z.CURR_HC,'([^;]+)',0)  = INNER_DRIV.CURR_CODE
            AND Z.DATE_TIME                            > INNER_DRIV.DATE_TIME
            GROUP BY INNER_DRIV.KEY_COL
            ) A ON A.KEY_COL=DRIV.KEY_COL
    LEFT JOIN (
            SELECT
            MIN(DATE_TIME)AS EFFECTIVE_DATE, INNER_DRIV.KEY_COL
            FROM TEMP.DM_ZEXPIDB_FICANT Z, TEMP.AB_FICANT INNER_DRIV
            WHERE CURR_CODE = INNER_DRIV.CURR_CODE
            AND Z.DATE_TIME > INNER_DRIV.DATE_TIME
            GROUP BY INNER_DRIV.KEY_COL
            ) B ON  B.KEY_COL=DRIV.KEY_COL

这种SQL(SELECT内部选择)可能无法在配置单元中工作。请将它们转换为左联接子查询。然后在NVL()或IFNULL()中使用它们。让我知道这是否有帮助。在这种情况下如何离开加入?请参考下面的答案。你的意思是我必须找到密钥?返回的错误是什么?介意我们在讨论室进一步讨论吗?我修改了一点sql,但我认为这不会修复此错误。您认为所有表都在临时模式中吗?请检查两个内部SQL是否都正常工作。我可以在2/3小时后加入(现在在办公室)。嘿@cardcaptor,问题解决了吗?