TSQL基于排序均匀地划分表

时间:2018-01-09 04:47:09

标签: sql sql-server-2008 tsql

如何根据排序平均分割表格?这是我正在谈论的模拟脚本:

编辑:我想将表平均分成4个不同的组。 (或任意数量的团体)。重要的是,每个群体都有相当高的和低的余额。

DECLARE @WorkList TABLE 
(
    account_number VARCHAR(10),
    balance MONEY,
    assigned_to INT
)

DECLARE @Loop INT
DECLARE @TotalPartsToSplitEvenly INT

SET @TotalPartsToSplitEvenly = 4
SET @Loop = 1

WHILE @Loop < 50
BEGIN
    INSERT INTO @WorkList (account_number, balance, assigned_to)
    VALUES ((@Loop * 5) * 1234, @Loop * 1000, NULL)

    SET @Loop = @Loop + 1
END

SELECT *
FROM @WorkList
ORDER BY balance DESC

我想平均分割结果集,以便每个人都能获得公平的平衡份额。

account_number balance               assigned_to
-------------- --------------------- -----------
302330         49000.00              1
296160         48000.00              2
289990         47000.00              3
283820         46000.00              4
277650         45000.00              1
271480         44000.00              2
265310         43000.00              3
259140         42000.00              4
252970         41000.00              1
246800         40000.00              2
240630         39000.00              3

NTILE不起作用。我没有想法。

1 个答案:

答案 0 :(得分:1)

您似乎想要row_number() mod 4:

select wl.*,
       (1 + (row_number() over (order by balance desc) - 1) % 4) as assigned_to
from @worklist wl;