Я пытаюсь создать временную таблицу и создать другую логику CASE WHEN для двух разных лекарств. Короче говоря, у меня есть два столбца, представляющих интерес для этих утверждений CASE WHEN;procedure_code
и ndc_code
. Мне нужно только 3 кода процедуры, но есть около 20 различных кодов ndc. Я создал временную таблицу temp.ndcdrug1
с этими кодами ndc для лекарства1 и temp.ndcdrug2
для кодов ndc для лекарства2 вместо того, чтобы перечислять каждый код 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?