Мне нужно сделать что-то вроде этого:
SELECT T.*, X.Val
FROM SomeTable T
LEFT OUTER JOIN (SELECT TOP 1 A.[Value] AS Val FROM AnotherTable A ORDER BY A.Id DESC) X ON X.Val = X.Val
Цель состоит в том, чтобы получить одно значение из подзапроса и присоединить / применить его ко всем строкам моего набора записей. Значение из подзапроса одинаково для всех строк и не зависит от них. Поэтому было бы эффективно запустить подзапрос только один раз, а затем использовать только извлеченное значение для всех строк. Но, исходя из времени выполнения запроса, кажется, что подзапрос снова выполняется для каждой строки, что является медленным. То же самое было и с другими способами, которые я пробовал, например, с внешним применением и т. Д.
На самом деле мой подзапрос выглядит так:
(SELECT dbo.MyScalarFunction() AS Val) X
Но я надеюсь, что это не должно иметь значения. Сама скалярная функция выполняется около 1 секунды, поэтому она должна запускаться только один раз во всем запросе, я не могу ждать тысячи секунд для тысяч строк в наборе записей.
Есть ли способ принудительно запуститьподзапрос только один раз, прежде чем присоединиться к нему?
Я нахожусь внутри представления, поэтому я не могу использовать объявленную переменную для хранения значения подзапроса.