【发布时间】:2019-10-02 08:59:57
【问题描述】:
我正在尝试创建一个临时表并为两种不同的药物构建不同的 CASE WHEN 逻辑。简而言之,我对这些 CASE WHEN 语句有两列感兴趣; procedure_code 和 ndc_code。我只需要 3 个程序代码,但大约有 20 个不同的 ndc 代码。我创建了一个 temp.ndcdrug1 临时表,其中包含药物 1 的 ndc 代码和 temp.ndcdrug2 药物 2 的 ndc 代码,而不是单独列出每个 ndc 代码。我的查询如下所示:
CREATE TABLE temp.flags AS
SELECT DISTINCT a.userid,
CASE WHEN (procedure_code = 'J7170' OR ndc_code in (select ndc_code from temp.ndcdrug1)) THEN 'Y' ELSE 'N' END AS Drug1,
CASE WHEN (procedure_code = 'J7205' OR procedure_code = 'C9136' OR ndc_code in (select ndc_code from temp.ndcdrug2)) THEN 'Y' ELSE 'N' END AS Drug2,
CASE WHEN (procedure_code = 'J7170' AND procedure_code = 'J7205') THEN 'Y' ELSE 'N' END AS Both
FROM table1 a
LEFT JOIN table2 b
ON a.userid = b.userid
WHERE...
AND...
当我运行它时,它返回:org.apache.spark.sql.AnalysisException: IN/EXISTS predicate sub-queries can only be used in a Filter.
我可以单独列出这些ndc_code 值,但其中有很多,所以需要一种更有效的方法来解决这个问题。有没有办法在写出 CASE WHEN 时使用这样的子选择查询?
【问题讨论】:
-
编辑您的问题并限定所有列名,以便阅读问题的人能够理解它。
标签: sql apache-spark apache-spark-sql