问题描述
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
我必须尝试什么样的形式才能成功?
解决方法
假设 TEMP.AB_FICANT.KEY_COL 作为我在 SQL 下创建的驱动表中的 KEY。两个子查询都转换为左连接。现在,如果您没有关键列,您可以加入一些在 AB_FICANT 中唯一的列。
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