SQL循环通过结果集来分配员工

时间:2015-10-23 17:29:05

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

我有一个select查询的结果,它按顺序(按优先级)按特定顺序返回(例如)10,000行

我有4名员工,我需要在分配中平均分配(所以每个人都有2,500名)和优先级(所以每个人都要获得相同数量的高优先级工作才能完成)

我正在使用两套简单的套装......

我的初始结果集10,000看起来像这样:

Job Due Date    Assignment
a   11/1/2015   
b   11/1/2015   
c   11/2/2015   
d   11/3/2015   
e   11/4/2015   
f   11/4/2015   
g   11/4/2015   
h   11/4/2015   
i   11/5/2015   

我的员工表很简单:

Employees
Tom
Jerry
Susan
Rick

我需要最终结果看起来像:

Job Due Date    Assignment  
a   11/1/2015   Tom

b   11/1/2015   Jerry   
c   11/2/2015   Susan   

d   11/3/2015   Rick    
e   11/4/2015   Tom 

f   11/4/2015   Jerry   

g   11/4/2015   Susan   
h   11/4/2015   Rick    
i   11/5/2015   Tom 

如何迭代我的10,000条记录,一次分配我的4名员工?

1 个答案:

答案 0 :(得分:2)

假设您只需要按日期划分工作,您可以使用row_number对行0 ... 3进行编号,并为此类员工创建相同类型的编号,然后只更新值:

; with A as (
  select row_number() over (order by [Due Date]) % 4 as EmpNo, *
  from Assignment
), E as (
  select row_number() over (order by (select null)) % 4 as EmpNo, *
  from Employees
)

update A
set A.Employee = E.Employee
from 
E where E.EmpNo = A.EmpNo

SQL Fiddle

中的示例