0

我有一个名为DUTY(columns: dutyid, dutyname, staffid) 的表和一个名为STAFF(columns: staffid, staffname)的表

为了公平起见,每个员工将被自动分配到每个职责条目(记录)。所以每当我想插入一个职责条目时我应该怎么做,它会自动为其分配staffid(顺序)。

例子

  • 员工编号:1 员工姓名:杰克
  • 员工编号:2 员工姓名:玛丽

因此,当我为值班插入一个新条目(第一个条目)时,它将自动插入staffid = 1值班表。对于第二个条目,staffid将为 2。

对于以下条目,它将继续循环staffid

期望的答案:

dutyid   dutyname   staffid 
  1      cleaning     1 
  2      cleaning     2 
  3      cleaning     1 
  4      cleaning     2 
  5      cleaning     1 
  6      cleaning     2 
  7      cleaning     3       new staff
  8      cleaning     1 
  9      cleaning     2 
 10      cleaning     3 

任何人都可以向我展示并解释我应该在我的存储过程中做什么......谢谢

4

4 回答 4

0

尝试这个 :

select * from duty;

Declare @dutyname varchar(20)='cleaning'
Declare @staffid int
Declare @maxstaffid int

select @staffid=staffid from duty
where dutyid=
(select max(dutyid) from duty);


select @maxstaffid=max(staffid) from staff;

print @maxstaffid;


insert into duty (dutyname, staffid)
select @dutyname,
case
  when @staffid=@maxstaffid then (select min(staffid) from staff)
  else (select min(staffid) from staff where staffid>@staffid)
end ;

select * from duty;
于 2013-05-06T06:21:39.827 回答
0

sqlfiddle

此查询将返回下一个员工编号并循环回第一个

SELECT max(staffid) FROM 
(
  SELECT top 1 staff.staffid
  FROM staff, (
   SELECT top 1 staffid
   FROM duty
   ORDER BY id DESC
  ) d
  WHERE staff.staffid > d.staffid
  Order by staff.staffid
 UNION
  SELECT top 1 staffid 
  FROM staff
  ORDER BY staffid
) x
于 2013-05-06T02:06:01.013 回答
0

另一种方法是使用值班表来获得下一个分配的最少使用的工作人员。

select top 1 staffID,count(*)
from duty
group by StaffId
order by 2

现在,随着每个新职责的插入,职责数量最少的工作人员将获得新的职责插入。当然,如果员工分配不频繁,这种解决方案可能会导致一个问题,即当添加新员工时,他会在一段时间内获得所有的职责分配。

于 2013-05-06T02:09:50.230 回答
0

您可以使用SCOPE_IDENTITY获取最后一个自动生成的 id:

declare @last_id int

-- assumes staffid is an auto generated key (identity)
insert into STAFF (staffname) 
values ('JACK')

select @last_id = SCOPE_IDENTITY()

insert into DUTY (dutyid, dutyname, staffid)
values (1, 'duty-name-jack', @last_id)

insert into STAFF (staffname) 
values ('MARY')

select @last_id = SCOPE_IDENTITY()

insert into DUTY (dutyid, dutyname, staffid)
values (2, 'duty-name-mary', @last_id)
于 2013-05-06T02:11:04.760 回答