を使用して結果をページングするために使用されているSQLステートメントがありますROW_NUMBER()
SELECT * FROM (
SELECT
ROW_NUMBER() OVER ( ORDER BY [tbl1].[Col1] ASC ) As RowNumber,
[tbl1].[Col1],
[tbl1].[Col2],
[tbl1].[Col3],
( SELECT [tbl2].[Col1]
FROM [tbl2]
WHERE [tbl2].[id] = [tbl1].[id]
AND [tbl2].[subid] = 2 ) As theColumnName
FROM
[tbl1]
) As tbl
WHERE RowNumber BETWEEN 1 AND 10
これはすべて正常に動作し、期待どおりです。ORDER BY
ただし、ストアド プロシージャに渡される値に基づいて、いくつかの追加機能を導入したいと考えています。
だから私は自分のROW_NUMBER() OVER (ORDER BY...
声明を次のように更新しました
ROW_NUMBER() OVER (ORDER BY
CASE WHEN @sortBy = 'type1' THEN [tbl1].[Col1]
WHEN @sortBy = 'type2' THEN [tbl1].[Col2]
END,
CASE WHEN @sortBy = 'type3' THEN [tbl1].[Col3]
END
ASC) As RowNumber
ここでわかるように、メソッドCASE
内にステートメントがあり、 は他の列とはデータ型が異なるため、が 2 つあります。OVER ()
CASE
[Col3]
theColumnName
これで問題なく動作しますが、エラーメッセージが表示されるだけなので、列で注文する方法がわかりませんInvalid column name 'theColumnName'
。
WHEN @sortBy = 'type4' THEN theColumnName
たとえば、列番号を使用しようとしましたWHEN @sortBy = 'type4' THEN 5
が、これも機能しません。
このカスタム列名で並べ替える方法はありますか?