У меня есть следующие Инлайн Table-значной функции:Помощь с RANK() Над скалярной функции - SQL Server 2008
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()
линия дает мне ошибку:
Invalid column name 'OverallSuitabilityScore'.
Функция dbo.Search_GetSuitability
является скалярной функцией , которая возвращает DECIMAL(8,5)
. Мне нужно присвоить рангу каждой строке на основе этого значения.
Единственный способ, с помощью которого я могу работать над этим, - это добавить вызов функции скалярной функции в часть ORDER BY
- это глупо. У меня около 5 таких скалярных вызовов функций, и мне нужно отдельно RANK()
значений для каждого.
Что я могу сделать? Могу ли я использовать Common Table Expression (CTE)?
Без приказа, будет не так просто случайным образом выбирать 10 значений? – Thomas
@Thomas - в хранимой процедуре вызова есть OrderBy. – RPM1984
Функция RANK будет правильно назначать значения из-за 'OVER (ORDER BY ...'. Порядок набора результатов не определен. – bobs