計算列が含まれていますが、基本的なselectステートメントを実行する次のselectSQLがあります。
Select *
From
(
Select *,
ROW_NUMBER() OVER
(ORDER BY
CASE WHEN @sortBy = 0 THEN R.DateCreated End Desc,
CASE WHEN @sortBy = 1 THEN R.DateCreated end Asc,
CASE WHEN @sortBy = 2 THEN TotalVotes END Desc,
CASE WHEN @sortBy = 2 THEN R.TotalFoundNotUseful END Desc
) AS RowNumber
From
(
Select *, (TotalFoundUseful + TotalFoundNotUseful) As TotalVotes
From Reviews
Where (DealID = @dealID) And (TotalAbuses < 10) And (Deleted = 0)
) As R
) As Rev
Where RowNumber BETWEEN @startRecord AND @endRecord
注意深く見ると、SELECTステートメント自体は3回実行されます。これが必要だとは信じられません。これを2つのselectステートメント(または1つでも)に減らす方法はありますか?実際にRowNumberを返す必要はありません。特定の範囲内の行を選択するためにのみ使用されます。