HIVEQL和Talend中子查询之间的NVL
当它们之间存在子查询时,是否可以调用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(
(
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,问题解决了吗?