SELECT DISTINCT lr.id,
lr.dept,
lr.name
Case When lr.id IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value1%') AND lr.id IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value2%') Then 1
Else 0
End As both_panels,
Case When lr.id IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value1%') AND lr.id NOT IN (SELECT id FROM RESULTS WHERE PANEL_FLAG LIKE '%value2%') Then 1
Else 0
End As only_value1_panel,
FROM RESULTS lr
Я упростил это, на самом деле мне действительно нужно гораздо больше операторов Case When и это кошмар производительности, потому что подзапрос выполняется каждый раз.Есть ли более эффективный способ сделать это?
Я пытался создать выражения Common Table и Temp Tables перед запросом, но способ, которым я это делал (замена операторов подзапроса на SELECT из CTE или таблицы Temp), кажется, не дает никакой производительностиразница, так как он все еще выполняет запрос каждый раз.