Я написал запрос, который использует 3 подзапроса, чтобы вернуть 3 значения для каждого сотрудника в основном запросе. Мне нужно добавить 4-е значение для каждого сотрудника, которое зависит или рассчитывается из 3 значений подзапроса.
Я смог сделать это только переписав подзапросы в моем операторе IIF
, но, поскольку он довольно тяжел для базы данных, это привело к падению производительности более чем в три раза по сравнению с временем выполнения запроса. .
SELECT a.emp_id, a.emp_name,
IIF((SELECT AVG(productivity_score) FROM productivity as b WHERE a.emp_id = b.emp_id) > 100, 'Y', 'N') as [prod],
IIF((SELECT AVG(lateness_score) FROM lateness as c WHERE a.emp_id = c.emp_id) > 80, 'Y', 'N') as [late],
IIF((SELECT AVG(attendance_score) FROM attendance as d WHERE a.emp_id = d.emp_id) > 80, 'Y', 'N') as [attn],
-- ** status of all 3 here ** --
IIF(IIF((SELECT AVG(productivity_score) FROM productivity as b WHERE a.emp_id = b.emp_id) > 100, 'Y', 'N') = 'Y'
AND IIF((SELECT AVG(lateness_score) FROM lateness as c WHERE a.emp_id = c.emp_id) > 80, 'Y', 'N') = 'Y'
AND IIF((SELECT AVG(attendance_score) FROM attendance as d WHERE a.emp_id = d.emp_id) > 80, 'Y', 'N') = 'Y',
'Y','N') as [eligibility]
FROM employee as a;
То, что я хочу, - это написать так:
-- ** status of all 3 here ** --
IIF([prod] = 'Y'
AND [late] = 'Y'
AND [attn] = 'Y', 'Y','N') as [eligibility]
FROM employee as a;
Есть ли способ написать его, чтобы не допустить повторного запуска подзапросов, или я должен писать этот запрос совершенно по-другому?