Sql 随机返回结果-访问

Sql 随机返回结果-访问,sql,vba,ms-access,random,Sql,Vba,Ms Access,Random,我需要将一名员工与我构建的小型Microsoft Access数据库中的一项任务进行匹配。基本上,我有一份45项潜在任务的清单,我有25名员工。我需要的是: 每个员工至少有一项任务 员工不得拥有两个以上的职位 能够在每次运行查询时随机化结果,这样相同的人就不会得到一致的相同任务 我的表格结构是: 员工-带字段:ID、姓名 任务-带字段:ID、位置、任务组、任务 我知道这是一个愚蠢的问题,但我真的很挣扎。我在SO和谷歌上搜索过,寻求帮助,但都没有成功 我没有办法将员工与任务联系起来,因为每个员工都

我需要将一名员工与我构建的小型Microsoft Access数据库中的一项任务进行匹配。基本上,我有一份45项潜在任务的清单,我有25名员工。我需要的是:

每个员工至少有一项任务 员工不得拥有两个以上的职位 能够在每次运行查询时随机化结果,这样相同的人就不会得到一致的相同任务 我的表格结构是: 员工-带字段:ID、姓名 任务-带字段:ID、位置、任务组、任务

我知道这是一个愚蠢的问题,但我真的很挣扎。我在SO和谷歌上搜索过,寻求帮助,但都没有成功

我没有办法将员工与任务联系起来,因为每个员工都有能力完成每项任务,所以我打算:

 1. SELECT * from Employees
 2. SELECT * from Tasks
 3. Union
 4. COUNT(Name) <= 2
但我不知道如何将这些结果随机化,这样人们就可以随机配对,每个人至少一次,没有人超过两次


任何帮助或指导都将不胜感激。谢谢。

考虑使用聚合查询进行交叉联接,该查询将选择集随机化。目前,在45 X 25时,这会产生1125条记录的笛卡尔积,这是可管理的

选择“查询另存为查询对象”,假设任务具有“自动编号”字段

选择cj.[Emp_Name],Maxcj.ID作为M_ID,Maxcj.Task作为M_Task 从…起 选择e.[Emp_Name]、t.ID、t.Task 从雇员e, 任务t cj 按cj分组。[Emp_名称],Rndcj.ID 按cj订购。[Emp_名称],Rndcj.ID 然而,这里的挑战是,上述查询将25名员工中每名员工的所有45项任务的顺序随机化,而您需要每名员工的前两项任务。不幸的是,MS Access没有像其他DBMS那样的行id来选择每个员工的前2名。我们不能对每个员工的任务ID使用相关子查询,因为这将始终按其值返回最高的两个任务ID,而不是随机返回的前两个ID

因此,要在Access中执行此操作,您需要在每次分配员工任务之前定期清理临时表,并使用autonumber通过相关子查询进行选择

创建表运行一次,需要自动编号字段

创建表交叉连接 ID自动递增主键, Emp_名称文本255, M_ID LONG, M_任务文本255 删除定期运行的查询

从交叉连接中删除; 定期运行附加查询

将[Emp_Name]、[M_ID]、[M_Task]插入到CrossJoinRandomPicks中 选择[Emp_名称]、[M_ID]、[M_任务] 来自mySavedCrossJoinQuery; 最终查询为每个员工选择前两个随机任务

选择c.name、c.M_字母 从CrossJoinC 哪里 从CrossJoinRandomPicks子菜单中选择Count* 其中sub.name=c.name
这在代码中看起来比在SQL中容易得多。从数据库中选择所有员工和所有任务,然后在代码中对它们进行耦合。@Carra你的意思是像VBA一样吗?VBA应该可以工作是的。接受一项任务,将其分配给随机的员工。从列表中删除该员工。接受下一个任务,将其分配给剩余的随机员工,并将其从列表中删除。等等。我不确定我在MS Access中会怎么做?你有什么建议或潜在的资源@Carra?