Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/21.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 交叉连接数据拆分_Sql_Sql Server_Sql Server 2008_Cross Join - Fatal编程技术网

Sql 交叉连接数据拆分

Sql 交叉连接数据拆分,sql,sql-server,sql-server-2008,cross-join,Sql,Sql Server,Sql Server 2008,Cross Join,我有一个表员工、另一个表部门和一个关系表: Employee Table id Name 1 A 2 B 3 C 4 D 5 E 6 F Department Table id Name 1 Accounting 2 Finance Relation Table id EmployeeId DepartmentId 我想做一个动态查询,以便能够在我的关系表中为每个部门分配相同数量的员工,我知道我可以使用交叉联接,但将把所有员工放在每个部门。我只想

我有一个表员工、另一个表部门和一个关系表:

Employee Table
id  Name
1   A
2   B
3   C
4   D
5   E
6   F

Department Table
id  Name
1   Accounting
2   Finance

Relation Table
id   EmployeeId   DepartmentId
我想做一个动态查询,以便能够在我的关系表中为每个部门分配相同数量的员工,我知道我可以使用交叉联接,但将把所有员工放在每个部门。我只想要分配,例如3名员工负责会计,另外3名员工负责财务,但这个数量可能会改变。
谢谢

这很有趣,它似乎工作得很好,每个部门的员工都是随机分布的:

select EmployeeId, DepartmentId
from 
(  select 
    ROW_NUMBER() OVER(ORDER BY NEWID()) as RankEmployee
  , Id as EmployeeId
    from Employee
 ) e , 
(  select 
    ROW_NUMBER() OVER(ORDER BY NEWID()) as RankDepartment
  , (select count(1) from Department) as CountDepartment
  , Id as DepartmentId
    from Department
 ) d
where (RankEmployee + RankDepartment) % CountDepartment = 0
状况

(RankEmployee + RankDepartment) % CountDepartment = 0
将仅为每个员工检索一行。
和秩是通过
OVER(ORDER BY NEWID())
随机计算的


这很有趣,似乎效果不错,员工随机分布在各个部门:

select EmployeeId, DepartmentId
from 
(  select 
    ROW_NUMBER() OVER(ORDER BY NEWID()) as RankEmployee
  , Id as EmployeeId
    from Employee
 ) e , 
(  select 
    ROW_NUMBER() OVER(ORDER BY NEWID()) as RankDepartment
  , (select count(1) from Department) as CountDepartment
  , Id as DepartmentId
    from Department
 ) d
where (RankEmployee + RankDepartment) % CountDepartment = 0
状况

(RankEmployee + RankDepartment) % CountDepartment = 0
将仅为每个员工检索一行。
和秩是通过
OVER(ORDER BY NEWID())
随机计算的


对不起,SQL Server 2008对不起,SQL Server2008@tbag:添加了有关此解决方案的注释。问题:如果我将RANK()替换为ROW_NUMBER(),而不是(ORDER by EmployeeId),是否也这样做?对于部门Row_编号也一样是一个更好的主意,因为它可以确保序列中没有间隙。每次执行的结果都应该不同,因为它是随机的@tbag:添加了关于此解决方案的注释。问题,如果我将RANK()替换为ROW_NUMBER(),而不是(ORDER by EmployeeId),是否也这样做?对于部门Row_编号也一样是一个更好的主意,因为它可以确保序列中没有间隙。每次执行的结果都应该不同,因为它是随机的!