【问题标题】:Using a CASE WHEN statement and an IN (SELECT...FROM) subquery使用 CASE WHEN 语句和 IN (SELECT...FROM) 子查询
【发布时间】:2019-10-02 08:59:57
【问题描述】:

我正在尝试创建一个临时表并为两种不同的药物构建不同的 CASE WHEN 逻辑。简而言之,我对这些 CASE WHEN 语句有两列感兴趣; procedure_codendc_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


【解决方案1】:

查询。

CREATE TABLE temp.flags AS
SELECT DISTINCT a.userid,
          CASE WHEN (
            procedure_code = 'J7170' OR 
            (select min('1') from temp.ndcdrug1 m where m.ndc_code = a.ndc_code) = '1'
          )  THEN 'Y' ELSE 'N' END AS Drug1,
          CASE WHEN (
            procedure_code = 'J7205' OR 
            procedure_code = 'C9136' OR 
            (select min('1') from temp.ndcdrug2 m where m.ndc_code = a.ndc_code) = '1'
          ) 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...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多