我有以下聯表值函數:幫助與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()
。
我該怎麼辦?我可以使用公用表表達式(CTE)嗎?
如果沒有訂購方式,是不是隻是隨機選擇10個值? – Thomas 2011-01-20 22:29:11
@Thomas - 調用存儲過程中有一個OrderBy。 – RPM1984 2011-01-20 22:31:30
RANK函數會正確地賦值,因爲OVER(ORDER BY ...),結果集的順序沒有定義, – bobs 2011-01-20 22:31:49