根据现有数字将数据分组

时间:2014-08-07 20:56:11

标签: sql-server tsql sql-server-2008-r2

我需要将一些记录分发给组,但我想尝试尽可能保持这些组。 我一直在寻找使用ntile,但我无法解决如何在不重做现有记录的情况下考虑现有项目

编辑: 举一个例子来解释我需要更好的东西:

我们有许多分配给工作组的任务,我们希望在工作组中均匀分配这些任务。对于ntile而言,这是一项简单的任务。 然而,当不再需要这些任务时,它们被移除,这使得组具有不同数量的任务。 当添加新任务时,我们仍然希望保持这些组的平衡。

EG现有群组:

GroupName - Task Count
Group1 - 1000
Group2 - 999
Group3 - 998

如果我们要添加6个新任务,他们会更多地分配到第2组和第2组。 3因为他们少于第1组。

Task 1 - Group3
Task 2 - Group3
Task 3  -Group2
Task 4 - Group1
Task 5 - Group2
Task 6 - Group3

示例表

Create table GroupTable
(GroupID int, Name varchar(200) )
Insert into GroupTable values (1,'Group1')
Insert into GroupTable values (2,'Group2')
Insert into GroupTable values (3,'Group3')


Create table Jobs(jobid int identity(1,1), name varchar(100),Groupid int)
--Existing tasks
Insert into Jobs(name,Groupid) values ('Task1',1)
Insert into Jobs(name,Groupid) values ('Task2',1)
Insert into Jobs(name,Groupid) values ('Task3',1)
Insert into Jobs(name,Groupid) values ('Task4',1)
Insert into Jobs(name,Groupid) values ('Task5',2)
Insert into Jobs(name,Groupid) values ('Task6',2)
Insert into Jobs(name,Groupid) values ('Task6',2)
Insert into Jobs(name,Groupid) values ('Task7',3)

-- New tasks
Insert into Jobs(name) values ('TaskA')
Insert into Jobs(name) values ('TaskB')
Insert into Jobs(name) values ('TaskC')
Insert into Jobs(name) values ('TaskD')
Insert into Jobs(name) values ('TaskE')
Insert into Jobs(name) values ('TaskF')

这为我们提供了6个未分配的任务和不均匀的组分配

GROUPNAME   TASK_COUNT
<none>      6
Group1      4
Group2      3
Group3      2

这意味着新任务将像这样分配

TaskA - Group3
TaskB - Group3
TaskC - Group2
TaskD - Group1
TaskE - Group2
TaskF - Group3

0 个答案:

没有答案