У меня есть следующая Встроенная табличная функция:
SELECT Locations.LocationId,
dbo.Search_GetSuitability(@SearchPreferences,
Score.FieldA, Score.FieldB, Score.FieldC) AS OverallSuitabilityScore,
RANK() OVER (ORDER BY OverallSuitabilityScore) AS OverallSuitabilityRank
FROM dbo.LocationsView Locations
INNER JOIN dbo.LocationScores Score ON Locations.LocationId = Score.LocationId
WHERE Locations.CityId = @LocationId
Эта строка RANK()
выдает мне ошибку:
Неверное имя столбца «ОбщийSuitabilityScore».
Функция dbo.Search_GetSuitability
является скалярной функцией , которая возвращает DECIMAL(8,5)
. Мне нужно присвоить ранг каждой строке на основе этого значения.
Единственный способ, с помощью которого я могу заставить работать вышеперечисленное, это снова добавить вызов скалярной функции в часть ORDER BY
- что глупо. У меня есть около 5 из этих вызовов скалярных функций, и мне нужно отдельные RANK()
значения для каждого.
Что я могу сделать? Могу ли я использовать общее табличное выражение (CTE)?