Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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