title: Distribute data into groups based on existing numbers
body: <p>I need to distribute some records to groups but I want to try to keep these groups as even as possible.
  I had been looking at using ntile but I can’t work out how to take existing items into account without redoing existing records</p>
  
  <p>Edit:
  To give an example that should explain what I need better:</p>
  
  <p>We have lots of tasks that are assigned to work groups which we want to distribute evenly across the work groups. This is a simple task for ntile..
  However when these tasks are no longer required they are removed which leaves the groups having different numbers of tasks.
  When new tasks are added we want to still try to keep these groups balanced.</p>
  
  <p>EG Existing groups :</p>
  
  <pre><code>GroupName - Task Count
  Group1 - 1000
  Group2 - 999
  Group3 - 998
  </code></pre>
  
  <p>If we were to add 6 new tasks they would have more assigned to Group 2 &amp; 3 as they have less than group 1.</p>
  
  <pre><code>Task 1 - Group3
  Task 2 - Group3
  Task 3  -Group2
  Task 4 - Group1
  Task 5 - Group2
  Task 6 - Group3
  </code></pre>
  
  <p>Sample tables</p>
  
  <pre><code>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')
  </code></pre>
  
  <p>This gives us 6 unassigned tasks and a uneven group assignment </p>
  
  <pre><code>GROUPNAME   TASK_COUNT
  &lt;none&gt;      6
  Group1      4
  Group2      3
  Group3      2
  </code></pre>
  
  <p>This means the new tasks will be assigned like this</p>
  
  <pre><code>TaskA - Group3
  TaskB - Group3
  TaskC - Group2
  TaskD - Group1
  TaskE - Group2
  TaskF - Group3
  </code></pre>