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

时间:2016-09-01 08:56:29

标签: sql sql-server-2008

我试图在前10行之后选择接下来的20行。

select TOP 20 * 
from memberform 
where Row_Number over(10)

3 个答案:

答案 0 :(得分:5)

您需要使用类似CTE(公用表表达式)和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

在内部ROW_NUMBER()窗口函数中,您需要定义排序,它定义行的编号方式(按日期排序,或按ID排序,或对您有意义的任何内容)

如果没有显式排序,则在前10个之后没有接下来的20个

答案 1 :(得分:1)

你的意思是偏移条款吗?

OFFSET排除了第一组记录。 OFFSET只能与ORDER BY子句一起使用。 FETCH NEXT的OFFSET返回一个已定义的记录窗口。 带FETCH NEXT的OFFSET非常适合构建分页支持。

排除前n个记录的一般语法是:

   SELECT column-names
   FROM table-name
   ORDER BY column-names
   OFFSET n ROWS

请参阅http://www.dofactory.com/sql/order-by-offset-fetch

答案 2 :(得分:0)

WITH T AS
(
SELECT TOP 30 name, 
       row_number() OVER (ORDER BY id) AS RN
FROM memberform 
ORDER BY id
)
SELECT 
       MAX(CASE WHEN RN <=10 THEN name END) AS Col1,
       MAX(CASE WHEN RN > 10 THEN name END) AS Col2
FROM T       
GROUP BY RN % 10