我试图在前10行之后选择接下来的20行。
select TOP 20 *
from memberform
where Row_Number over(10)
答案 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
答案 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