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_编号也一样是一个更好的主意,因为它可以确保序列中没有间隙。每次执行的结果都应该不同,因为它是随机的!