【发布时间】:2020-12-29 04:42:22
【问题描述】:
当它们之间有子查询时,是否可以调用 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,
我们知道系统限制我们在 select 中进行 make select: https://cwiki.apache.org/confluence/display/Hive/Subqueries+in+SELECT#space-menu-link-content
另外,我们只能在表格这样的情况下使用 CASE WHEN :
CASE WHEN rr IS NULL THEN kk
ELSE rr
END AS EXPI_DATE
我必须尝试什么样的形式才能成功?
【问题讨论】:
-
这种 SQL(SELECT inside SELECT)可能在 hive 中不起作用。请将它们转换为左连接子查询。然后在 NVL() 或 IFNULL() 中使用它们。让我知道这是否有帮助。
-
这种情况下如何左加入?
-
请参考下面的答案