我选择了带TOP 50,000
的前50,000行,现在我想获得下一组50,000。我无法使用ROW_NUMBER
,因为条目没有id
。我在SQL Server Management Studio的帮助下使用SQL Server 2012。
如何获得前50,000个之后的条目?
答案 0 :(得分:3)
使用SQL Server 2012,您可以在OFFSET
子句中获得下一个FETCH NEXT
和ORDER BY
个关键字。
所以你可以用:
选择前50'000行SELECT (list of columns)
FROM dbo.YourTable
WHERE (some condition)
ORDER BY (some column)
OFFSET 0 ROWS FETCH NEXT 50000 ROWS ONLY
然后接下来的50'000以后:
SELECT (list of columns)
FROM dbo.YourTable
WHERE (some condition)
ORDER BY (some column)
OFFSET 50000 ROWS FETCH NEXT 50000 ROWS ONLY
(只是旁注:页面大小 50'000行似乎过于庞大 - 大概是1000左右还是什么?)
有关详细信息和背景信息,请参阅Using the new OFFSET and FETCH NEXT options
答案 1 :(得分:0)
如果你有办法确保结果的顺序一致,我就看不出为什么你不能将row_number用于这样的公用表表达式:
;WITH CTE AS
(
SELECT *, ROW_NUMBER() OVER(ORDER BY something_unique DESC) AS 'Row'
FROM my_table
)
-- To get the first 50k rows:
SELECT * FROM CTE WHERE Row BETWEEN 0 AND 50000
-- To get the next 50k rows:
--SELECT * FROM CTE WHERE Row BETWEEN 50001 AND 100000
尽管你只需要50k就可以在整个表格中构建行号,但这并不是很有效。如果可能,您可能需要考虑在源表中添加一个额外的列以包含一些人为的数字。
正如评论中所指出的,只是使用TOP X而没有排序结果首先会产生不一致的结果,因为如果没有明确指定,则无法保证订单。