在前10名后选择接下来的20行

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)

mar*_*c_s 6

您需要使用类似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