私は、次のインライン表値関数があります: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
を:
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