Причина, по которой исходный запрос не работает, связана с порядком операций.
Производная таблица T2 дала 1 и только 1 запись; не 1 запись на номер ЧАСТИ. Это связано с тем, что производная таблица получает результаты до того, как ее можно будет соединить с T1. Так как номера деталей не совпадают, если вам не повезет с частью и днем и компанией ... вы не получите никаких данных. Перекрестное / внешнее применение позволяет получить ТОП-запись по критериям присоединения. и, таким образом, вернет несколько записей; 1 для каждой части и компании; вместо 1.
Я думаю, что вы после перекрестного или внешнего применения, и вы можете избежать 2-го фильтра в производной таблице (T2). Если вы хотите, чтобы части без каких-либо транзакций были сохранены, используйте внешнее применение, если вы хотите, чтобы только те с Частичные транзакции используют перекрестное применение.
SELECT T1.PartNum, T2.TranDate, T2.TranType
FROM dbo.Part T1
CROSS APPLY (SELECT TOP 1 S1.*
FROM PartTran S1
WHERE S1.TranDate > '10/10/2016'
AND S1.TranType <> 'ADJ-CST'
ORDER BY S1.TranDate DESC) T2
ON T1.Company = T2.Company
AND T1.PartNum = T2.PartNum
WHERE T1.PartNum = '0000AAAO'
В качестве альтернативы вы можете использовать номер строки вместо top и разделение вашей компании и partNum при сортировке по transdate и возвращать только номер строки, 1-й по порядку при трансдате по убыванию.
Вот ссылка MSDN Doc , показывающая, как применяется перекрестный / внешний
работы.