1
我需要將SQL結果集分成具有最大行數的批處理。這將超出75M +行的表格,所以很多簡單的解決方法(例如使用Excel或While循環)都不起作用。按最大行數批處理SQL Server結果
下將設置一個例子:
CREATE TABLE [dbo].[TeamPersonMap](
[TeamPersonId] [int] IDENTITY(1,1) NOT NULL,
[TeamId] [int] NOT NULL,
[PersonId] [int] NOT NULL
)
GO
DECLARE @itemCount int = 0
WHILE (@itemCount < 5)
BEGIN
SET @itemCount = @itemCount + 1
DECLARE @personId int = 100
WHILE (@personId < 105)
BEGIN
SET @personId = @personId + 1
INSERT INTO TeamPersonMap (TeamId, PersonId) VALUES (@itemCount, @personId)
END
END
現在我們可以運行以下查詢:
SELECT DENSE_RANK()OVER (ORDER BY PersonId) as BatchGroupId, *
FROM TeamPersonMap ORDER BY PersonId
這將是結果集:
BatchId TeamPersonId TeamId PersonId
1 1 1 101
1 6 2 101
1 11 3 101
1 16 4 101
1 21 5 101
2 22 5 102
2 17 4 102
2 12 3 102
如果規則說最大批量大小是3,PersonId必須與我需要查詢以獲得最終BatchId相同以下。通過PERSONID分區
BatchId TeamPersonId TeamId PersonId
1 1 1 101
1 6 2 101
1 11 3 101
2 16 4 101
2 21 5 101
3 22 5 102
3 17 4 102
3 12 3 102
感謝您的幫助,這個偉大的 - 它完美的作品!我在'with'語句前添加了一個分號以使SQL更快樂 - SQL Fiddle並不關心,但SSMS 2008似乎在某些時候。 – Nicknow 2014-08-28 02:29:26
沒問題。分號在sql語句的末尾不是開頭,因此您的分號問題可能意味着您在同一個工作表中缺少結尾分號的前一個sql語句。 – ivanatpr 2014-08-29 20:13:22