DiH*_*DiH 3 sql sql-server-2008
我试图在排名前10行之后选择接下来的20行.
select TOP 20 *
from memberform
where Row_Number over(10)
Run Code Online (Sandbox Code Playgroud)
您需要使用类似CTE(公用表表达式)和a ROW_NUMBER来定义数据集的行编号 - 然后从该编号的CTE中选择所需的行集:
;WITH PagingCte AS
(
SELECT
(list of columns),
RowNum = ROW_NUMBER() OVER (ORDER BY -some-column-of-yours-)
FROM
dbo.memberform
)
SELECT
(list of columns)
FROM
PagingCte
WHERE
RowNum BETWEEN 10 AND 29
Run Code Online (Sandbox Code Playgroud)
在内部ROW_NUMBER()窗口函数中,您需要定义一个排序,该顺序定义行的编号方式(按日期排序,或按ID排序,或对您有意义的任何内容).
没有明确的排序,在前10个之后没有下一个20 ...
小智 6
你的意思是抵消条款吗?
OFFSET 排除第一组记录。OFFSET 只能与 ORDER BY 子句一起使用。OFFSET 与 FETCH NEXT 返回定义的记录窗口。OFFSET 和 FETCH NEXT 非常适合构建分页支持。
排除前 n 条记录的一般语法是:
SELECT column-names
FROM table-name
ORDER BY column-names
OFFSET n ROWS
Run Code Online (Sandbox Code Playgroud)
请参考http://www.dofactory.com/sql/order-by-offset-fetch