Sql 合并到表_namedst中 使用 使用随机_任务rid,rn作为 选择ROWID, 按DBMS_RANDOM.VALUE排序的行数 从表\u名称 , 随机姓名姓名、注册护士、员工人数 选择名称, 按DBMS_RANDOM.VALUE排序的行数, 数完 来自员工 选择rid, 名称 从随机任务 内连接 随机名称 在MOD t.rn上,n.num_雇员+1=n.rn src 在src.rid=dst.ROWID上 当匹配时 更新集名称=src.name;
结果: 从表_名称中选择*;Sql 合并到表_namedst中 使用 使用随机_任务rid,rn作为 选择ROWID, 按DBMS_RANDOM.VALUE排序的行数 从表\u名称 , 随机姓名姓名、注册护士、员工人数 选择名称, 按DBMS_RANDOM.VALUE排序的行数, 数完 来自员工 选择rid, 名称 从随机任务 内连接 随机名称 在MOD t.rn上,n.num_雇员+1=n.rn src 在src.rid=dst.ROWID上 当匹配时 更新集名称=src.name;,sql,oracle,Sql,Oracle,结果: 从表_名称中选择*; DBFIDLE分配表中是否只有两列?员工姓名是否存储在员工表中?尚未存储;我将更新原始表格,生成一个包含姓名的表格。纯随机分配意味着每个员工有25%的机会获得每项分配。这意味着一名员工完全有可能得到2到3份工作,而另一名员工得到0份。我猜您希望添加额外的规则,例如每个员工必须被分配到一项任务。@JustinCave,我猜OP正需要这样做。1个任务将只分配给1名员工,但顺序必须完全随机。是否要根据这些任务编辑我的问题,但如果任务数不能除以4怎么办?例如,如果有6个任务
DBFIDLE分配表中是否只有两列?员工姓名是否存储在员工表中?尚未存储;我将更新原始表格,生成一个包含姓名的表格。纯随机分配意味着每个员工有25%的机会获得每项分配。这意味着一名员工完全有可能得到2到3份工作,而另一名员工得到0份。我猜您希望添加额外的规则,例如每个员工必须被分配到一项任务。@JustinCave,我猜OP正需要这样做。1个任务将只分配给1名员工,但顺序必须完全随机。是否要根据这些任务编辑我的问题,但如果任务数不能除以4怎么办?例如,如果有6个任务。我希望最终结果是工人之间最多有1个任务差异。分配表中是否只有2列?员工姓名是否存储在员工表中?尚未存储;我将更新原始表格,生成一个包含姓名的表格。纯随机分配意味着每个员工有25%的机会获得每项分配。这意味着一名员工完全有可能得到2到3份工作,而另一名员工得到0份。我猜您希望添加额外的规则,例如每个员工必须被分配到一项任务。@JustinCave,我猜OP正需要这样做。1个任务将只分配给1名员工,但顺序必须完全随机。是否要根据这些任务编辑我的问题,但如果任务数不能除以4怎么办?例如,如果有6个任务。我希望最终结果是,工人之间最多有1个任务差异。
TASK |NAME
1 Get Chicken |
2 Clean Chicken|
3 Cook Chicken |
4 Eat Chicken |
5 Eat Corn |
6 Takeout Trash|
NAME
John
Lucy
Fred
Jasmine
TASK |NAME
1 Get Chicken |John
2 Clean Chicken|Jasmine
3 Cook Chicken |Lucy
4 Eat Chicken |Fred
5 Eat Corn |Fred
6 Takeout Trash|Jasmine
begin
for src in (select t.task_id, e.name
from (select t.*,
row_number() over (order by dbms_random.value) rnk
from task t) t
join
(select e.*,
row_number() over (order by dbms_random.value) rnk,
count(*) over () num_emps
from employee e) e
on( mod( t.rnk, e.num_emps ) = e.rnk - 1 ) )
loop
update task
set name = src.name
where task_id = src.task_id;
end loop;
end;
/
MERGE INTO so_tasks t USING (
WITH numbered_tasks AS ( SELECT t.*,
row_number() OVER (ORDER BY dbms_random.value) task_number,
count(*) OVER () total_tasks FROM so_tasks t ),
numbered_employees AS ( SELECT e.*,
row_number() OVER (ORDER BY dbms_random.value) employee_number,
count(*) OVER () total_employees FROM so_employees e)
SELECT nt.task,
ne.name
FROM numbered_tasks nt
INNER JOIN numbered_employees ne
ON ne.employee_number-1 = mod(nt.task_number-1, ne.total_employees) ) u
ON ( t.task = u.task )
WHEN MATCHED THEN UPDATE SET t.name = u.name;
CREATE TABLE so_tasks
( task VARCHAR2(30) NOT NULL PRIMARY KEY,
name VARCHAR2(30) );
INSERT INTO so_tasks ( task ) VALUES ('Get Chicken');
INSERT INTO so_tasks ( task ) VALUES ('Clean Chicken');
INSERT INTO so_tasks ( task ) VALUES ('Cook Chicken');
INSERT INTO so_tasks ( task ) VALUES ('Eat Chicken');
INSERT INTO so_tasks ( task ) VALUES ('Eat Corn');
INSERT INTO so_tasks ( task ) VALUES ('Takeout Trash');
CREATE TABLE so_employees
( name VARCHAR2(30) NOT NULL PRIMARY KEY );
INSERT INTO so_employees ( name ) VALUES ('John');
INSERT INTO so_employees ( name ) VALUES ('Lucy');
INSERT INTO so_employees ( name ) VALUES ('Fred');
INSERT INTO so_employees ( name ) VALUES ('Jasmine');
COMMIT;
MERGE INTO so_tasks t USING (
WITH numbered_tasks AS ( SELECT t.*,
row_number() OVER (ORDER BY dbms_random.value) task_number,
count(*) OVER () total_tasks FROM so_tasks t ),
numbered_employees AS ( SELECT e.*,
row_number() OVER (ORDER BY dbms_random.value) employee_number,
count(*) OVER () total_employees FROM so_employees e)
SELECT nt.task,
ne.name
FROM numbered_tasks nt
INNER JOIN numbered_employees ne
ON ne.employee_number-1 = mod(nt.task_number-1, ne.total_employees) ) u
ON ( t.task = u.task )
WHEN MATCHED THEN UPDATE SET t.name = u.name;
SELECT * FROM so_tasks;
+---------------+---------+
| TASK | NAME |
+---------------+---------+
| Get Chicken | John |
| Clean Chicken | Jasmine |
| Cook Chicken | Lucy |
| Eat Chicken | Fred |
| Eat Corn | Jasmine |
| Takeout Trash | Fred |
+---------------+---------+
TASK | NAME
:------------ | :------
Get Chicken | John
Clean Chicken | Jasmine
Cook Chicken | Fred
Eat Chicken | Lucy
Eat Corn | Fred
Takeout Trash | Lucy