SELECT * FROM (
SELECT id, val, ROW_NUMBER()OVER(ORDER BY id ) AS n FROM #t
) AS X WHERE X.n BETWEEN 1 AND 10 -- ORDER BY X.id
最后的 ORDER BY X.id 应该是多余的吧,ROW_NUMBER后面跟着排序规则后,分页之后再拿数据和OVER后面的排序规则一样还需要重新写order by 吗?
------解决思路----------------------
邏輯不一樣,意義不一樣。
1)row_number()後的order by是按什麼字段排序, 生成新字段。
2)註釋掉的order by 是最終的結果是按什麼字段排序。
如你所說,row_number()新產生的字段作為條件,篩選出結果。並不意味著結果都是排好序的。
所以加order by 還是有必要的。
------解决思路----------------------
如果后的order by 和row_number()后的order by 排序的字段不一样,显示的结果,n这序号就是乱的了吧
------解决思路----------------------
在#1已经说了,你写出来的这种情况,只受ROW_NUMBER()的排序影响,所以外面如果以ID排序,不加也可以
例子~
;WITH CTE AS(
SELECT 1 ID
UNION ALL SELECT 3
UNION ALL SELECT 6
UNION ALL SELECT 2
UNION ALL SELECT 4
UNION ALL SELECT 5
)
SELECT * FROM(SELECT ROW_NUMBER()OVER(ORDER BY ID)RN,ID FROM CTE)T1 WHERE RN BETWEEN 3 AND 5