2017-05-05 49 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萬張唱片。 –