2017-05-05 4 views
1

私はバッチ式でレコードを選択する必要があります。以下の例のように20レコードあります。もし私が10の大きさのバッチを与えるなら、2つのループがあります。ここで問題となるのは、もし私がトップ10を実行すると、555の値がその位置が10と11になると分割されます。したがって、555もその最初のバッチに含めなければなりません。私はこれをどのように達成できるのでしょうか?これはほんの一例で、私は処理するために900万レコードあり、実際のシナリオでは200万バッチになります。ループ内のバッチ処理のレコードを選択してください

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

ヒントの書式設定:質問を編集してください。 1)データ間の空白行を削除します。 2)サンプルデータをマークし、 '{}'をクリックします。 – jarlh

+0

Plsは期待される出力を提供します – balaji

+0

あなたの現在のコードの試行も見せてください。 – jarlh

答えて

2

あなたはtop with tiesを使用することができます - この後、述べた複数のレコードを返すことがありますが、別のバッチに似たidを中断されません。

サンプルテーブルを作成し、移入(くださいは私たちにあなたの将来の質問では、このステップを保存):

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が1つのグループを9億レコードにするため、これは遅くなります。従って1つのバッチで私は100万レコードを取っています。 –

関連する問題