Я переписал ваш запрос, основываясь на том, что вы хотели добавить:
WITH residency_cte AS (
SELECT TOP (1)
r.people_code_id,
r.resident_commuter,
r.academic_year,
r.academic_term,
r.academic_session
FROM RESIDENCY r
WHERE r.academic_year = '2010'
AND r.academic_term = 'Fall'
AND r.academic_session = 'Und 01'
ORDER BY revision_date DESC)
SELECT r.people_code_id,
r.resident_commuter [Campus6],
c1.udormcom [AG],
aR.RESIDENT_COMMUTER,
ar.ACADEMIC_SESSION,
ar.ACADEMIC_TERM,
ar.academic_year,
ar.revision_date
FROM residency_cte r
LEFT JOIN AG_Common..CONTACT1 c1 ON c1.key4 = r.PEOPLE_CODE_ID
AND SUBSTRING(c1.udormcom, 1, 1) != r.resident_commuter
LEFT JOIN AG_Common..CONTACT2 c2 ON c2.accountno = c1.ACCOUNTNO
LEFT JOIN AGPCBridge..ArchiveRESIDENCY aR ON aR.PEOPLE_CODE_ID = r.PEOPLE_CODE_ID
AND aR.ACADEMIC_SESSION = r.academic_session
AND aR.ACADEMIC_TERM = r.academic_term
AND aR.ACADEMIC_YEAR = r.academic_year
AND SUBSTRING(c1.udormcom, 1, 1) = aR.RESIDENT_COMMUTER
Единственное, что находится в столбце udormcom
- как только я узнаю, из какой он таблицы, я перенесу предложение в объединения. Я также обновил объединения в таблицу ArchiveRESIDENCY
, поэтому вам нужно настроить даты только в одном месте.
Но имейте в виду, что использование подстроки для сопоставления с другим столбцом никогда не будет работать хорошо - пока модель данных не изменится, чтобы исправить это, это никогда не будет действительно оптимизировано.