У меня есть SQL-запрос, в котором я пытаюсь использовать subslect value
во внешнем where
.Использовать внутреннее значение выбора в разделе Where
SELECT count(A.[processID]) AS total,
B.[process] AS processName,
(SELECT TOP 1 LocationDesc
FROM dbo.EmployeeTable_Historical AS D
WHERE C.leaver = D.QID
ORDER BY meta_logDate DESC)
FROM dbo.attritionDataPrevention AS A
INNER JOIN
attritionProcesses AS B
ON A.[processID] = B.[processID]
INNER JOIN
dbo.attritionData AS C
ON A.[recordID] = C.recordID
WHERE D.[locationDesc] IN (SELECT location
FROM @table)
AND YEAR(C.[leaveDate]) = @year
GROUP BY B.[processID]
ORDER BY total DESC
FOR XML PATH ('type'), TYPE, ELEMENTS, ROOT ('root');
В моей основной WHERE
статьи, он говорит, что не может BIND WHERE D.[locationDesc]
. Алиас S
находится в подчиненном запросе, поэтому я не слишком уверен, как использовать его значение.
UPDATE
За предложение, я изменил код на следующее:
SELECT count(A.[processID]) AS total,
B.[process] AS processName
FROM dbo.attritionDataPrevention AS A
INNER JOIN
attritionProcesses AS B
ON A.[processID] = B.[processID]
INNER JOIN
dbo.attritionData AS C
ON A.recordID = C.recordID,
(
SELECT TOP 1 D.LocationDesc
FROM dbo.EmployeeTable_Historical AS D
WHERE C.leaver = D.QID
ORDER BY D.[meta_logDate] DESC
) AS D
WHERE D.locationDesc IN (SELECT location FROM @table)
AND YEAR(C.[leaveDate]) = @year
GROUP BY B.[process]
ORDER BY total DESC
FOR XML PATH ('type'), TYPE, ELEMENTS, ROOT ('root');
Единственная проблема сейчас WHERE C.leaver
обыкновение привязывать к внутреннему соединению.
Ввод подвыбора заявления в выбранной части запроса, как правило, признак плохо сформированный запрос. Переместите этот подзапрос вниз в свой оператор from и его псевдоним, затем вы можете получить доступ к его полям. – paqogomez
@paqogomez, когда я это сделал, я больше не могу получить доступ к C.leaver, который находится в sub select в 'FROM', - не знаю, почему – SBB
. Ваше редактирование не совсем то, что я предложил, это приведет к декартовому продукту. Зачем вам это нужно в подзапросе? Что это за результат, который требует верх 1? – paqogomez