此查询有效:
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
Run Code Online (Sandbox Code Playgroud)
我不明白的是,为什么ASC
和DESC
在后(或外)的CASE
语句。看起来ASC
和DESC
被无条件地放入,这是没有意义的......它可能会解决:
ROW_NUMBER() OVER (ORDER BY
DESC,
AggregateId ASC
) AS RowNumber
Run Code Online (Sandbox Code Playgroud)
为什么该CASE
语句不包含ASC
or DESC
(如果您尝试这样做,则会出现语法错误)?
ASC
and DESC
come在一个CASE
子句之后? CASE
语句不包含ASC
or DESC
(如果您尝试这样做,则会出现语法错误)?因为CASE
表达式(它既不是子句也不是语句)可以有一个值/表达式作为结果,而不是像ASC
or 之类的代码字FROM
。CASE
表达式文档中提供的语法是:
Searched CASE expression:
CASE
WHEN Boolean_expression
THEN result_expression [ ...n ]
[ ELSE else_result_expression ]
END
Run Code Online (Sandbox Code Playgroud)
它可能会解决:
ROW_NUMBER() OVER (ORDER BY
DESC,
AggregateId ASC
) AS RowNumber
Run Code Online (Sandbox Code Playgroud)不,它不能。由于ELSE NULL
所有CASE
表达式都有默认的隐含部分,如果您不提供它。
归档时间: |
|
查看次数: |
1302 次 |
最近记录: |