SQL Server-以相同的方式分配列表中的字符串

时间:2018-09-28 09:29:43

标签: sql sql-server ssms

我有20行的列表。每行代表要分配的任务列表。

创建表T(TASK_ID为STRING,ASSIGNER_ID为STRING)。 INSERT INTO T('ABCD',NULL)INSERT INTO T('BCDE',NULL)等等...

我的目的是从列表(即Jon-Joe-Dave-Mike)中随机分配每个任务,但是每个人的总负担必须相等。

在这种情况下(20个任务-4人),最大值为5。 如何将任务分配给SQL Server中的任务?

非常感谢!

1 个答案:

答案 0 :(得分:1)

此语法将为每个人分配5个随机任务:

DECLARE @p table(id int identity, name varchar(40))
DECLARE @t table(id int, taskname varchar(50))

INSERT @p values('Joe'),('Mark'),('Demi'),('Thomas')

INSERT @t(id)
VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11)
      ,(12),(13),(14),(15),(16),(17),(18),(19),(20)

UPDATE @t set taskname = 'task' + cast(id as varchar(2))

;WITH CTE as
(
  SELECT taskname, ntile(4) over(order by newid()) rnd_id
  FROM @t
)
SELECT p.name, cte.taskname
FROM CTE
JOIN @p p
ON p.id = cte.rnd_id