2017-05-05 19 views
1

我需要分批选择记录,如下面的例子中我们有20条记录。如果我给出10个大小的批次,则会有两个循环。这里的问题是如果我进入前10名,那么555的价值将被分割为10和11的位置,因此555也应该包括在该第一批中。我怎么能做到这一点?这仅仅是一个例子,我有9亿条记录要处理,而我的批次将在实际情况下达到200万条。选择循环中批处理的记录

ID 
------- 
111 
111 
111 
222 
222 
333 
333 
444 
444 
555 
555 
666 
666 
777 
777 
888 
888 
+0

格式化提示:编辑您的问题。 1)删除数据之间的空行。 2)标记样本数据,然后点击'{}'。 – jarlh

+0

请提供预期产出 – balaji

+0

同时向我们展示您当前的代码尝试。 – jarlh

回答

2

您可以使用top with ties - 这可能会返回更多的记录,然后说但不会打破类似IDS不同批次:

创建和填充示例表(保存我们这一步在你未来的问题):

DECLARE @T AS TABLE 
(ID int) 

INSERT INTO @T VALUES 
(111),(111),(111), 
(222),(222), 
(333),(333), 
(444),(444), 
(555),(555), 
(666),(666), 
(777),(777), 
(888),(888) 

select语句:

SELECT TOP 10 WITH TIES ID 
FROM @T 
ORDER BY ID 

结果:

row  ID 
1  111 
2  111 
3  111 
4  222 
5  222 
6  333 
7  333 
8  444 
9  444 
10  555 
11  555 
+0

不错,对我来说是新鲜事.... – Joby

0

在选择记录时,可以在限制它们的编号之前按ID对它们进行分组。

+0

由于数据分组数量巨大是不可行的,比如说最多20个ID将会使一个组的数量达到9亿条记录,因此这将会很慢。因此在一批中,我正在拍摄100万张唱片。 –