Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用CASE-WHEN语句和IN(SELECT…FROM)子查询_Sql_Apache Spark_Apache Spark Sql - Fatal编程技术网

Sql 使用CASE-WHEN语句和IN(SELECT…FROM)子查询

Sql 使用CASE-WHEN语句和IN(SELECT…FROM)子查询,sql,apache-spark,apache-spark-sql,Sql,Apache Spark,Apache Spark Sql,我试图创建一个临时表,并为两种不同的药物建立不同的案例逻辑。简言之,我对这些CASE-WHEN语句有两列感兴趣程序代码和ndc代码。我只需要3个过程代码,但大约有20个不同的ndc代码。我创建了一个temp.ndcdrug1temp表,其中包含药物1的ndc代码和药物2的ndc代码temp.ndcdrug2,而不是单独列出每个ndc代码。我的查询如下所示: CREATE TABLE temp.flags AS SELECT DISTINCT a.userid,

我试图创建一个临时表,并为两种不同的药物建立不同的案例逻辑。简言之,我对这些CASE-WHEN语句有两列感兴趣<代码>程序代码和
ndc代码
。我只需要3个过程代码,但大约有20个不同的ndc代码。我创建了一个
temp.ndcdrug1
temp表,其中包含药物1的ndc代码和药物2的ndc代码
temp.ndcdrug2
,而不是单独列出每个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谓词子查询只能在筛选器中使用。 我可以单独列出这些
ndc_code
值,但它们有很多,因此需要一种更有效的方法。写CASE-when's时有没有这样的子选择查询方法?

查询

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...

编辑您的问题并限定您的所有列名,以便阅读该问题的人能够理解它。