Sql 使用CASE-WHEN语句和IN(SELECT…FROM)子查询
我试图创建一个临时表,并为两种不同的药物建立不同的案例逻辑。简言之,我对这些CASE-WHEN语句有两列感兴趣<代码>程序代码和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,
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...
编辑您的问题并限定您的所有列名,以便阅读该问题的人能够理解它。