此查询有效:
DECLARE @Ordering NVARCHAR(50)
SET @Ordering = 'aggregateid'
DECLARE @OrderDirectionInt INT
SET @OrderDirectionInt = 0 --1
SELECT * FROM (
SELECT
ROW_NUMBER() OVER (ORDER BY
CASE WHEN LOWER(@Ordering) = 'aggregateid' AND @OrderDirectionInt = 1 THEN AggregateId END DESC,
CASE WHEN LOWER(@Ordering) = 'aggregateid' AND @OrderDirectionInt = 0 THEN AggregateId END ASC
) AS RowNumber,
MyField
FROM
MyTable
) AS TempResults
WHERE TempResults.RowNumber BETWEEN 12 AND 23
我不明白为什么ASC
andDESC
在语句之后(或之外) 。CASE
看起来ASC
andDESC
被无条件地放入,这没有任何意义......它可能会解决:
ROW_NUMBER() OVER (ORDER BY
DESC,
AggregateId ASC
) AS RowNumber
为什么该CASE
语句不包含ASC
or DESC
(如果您尝试这样做,则会出现语法错误)?
ASC
andDESC
come after一个CASE
子句?CASE
语句不包含ASC
orDESC
(如果您尝试这样做,则会出现语法错误)?因为
CASE
表达式(既不是子句也不是语句)可以有一个值/表达式作为结果,而不是像ASC
or之类的代码词FROM
。CASE
表达式文档中提供的语法是:它可能会解决:
不,它不能。由于
ELSE NULL
所有CASE
表达式都作为默认值的隐含部分,如果您不提供它。