任何人都可以帮忙!我似乎无法解决这个难题?
输入表
DepartmentID EmpID
-----------------------
1 100
1 101
1 103
1 200
2 300
2 350
3 350
3 100
4 50
4 30
4 45
5 50
5 51
5 52
5 53
6 53
6 54
7 54
7 55
8 55
8 56
10 800
11 900
输出表
请注意,GroupID
是由我们创建的,用于对拥有普通员工的部门进行分组,条件是1名员工不能在两个部门中。
GroupID Department
-----------------------
1000 1
1000 2
1000 3
1001 4
1001 5
1001 6
1001 7
1001 8
1002 10
1003 11
示例Department
1,2& 3分组:
EmpID
100在Department
1& 3,但等等! EmpID
350在2& 3也是。所以也将它们分组。现在由第1,2和3部门创建的集团没有任何其他部门的产品,那么我们就可以停止了。
注意:这不是正常的'因为我们不希望我们创建的任何2个团队拥有相同的员工。
LOGIC:
第1步: EmpID
50在部门4&所以第4组和第4组。 5在一起
Step2:所以这意味着4人小组和5有50,30,45,51,52,53名独特员工
第3步:但是等等! Department
6 {4}与{4}组共有EmpID
53 5,在step2中形成
Step4:集团部门4,5和6.这个新组拥有50,30,45,51,52,53,54的独特员工
Step5:但是等等!部门7的EmpID
为54,这与第4步中形成的集团相同。所以将它们组合在一起
这继续......直到我们没有任何不属于两组的员工。因此,在第7组中,第8组也需要合并。进入步骤4中提到的小组。
答案 0 :(得分:1)
这是一个需要递归CTE的图遍历问题。我认为这是一种方法:
with cte as (
select department, empid
from inputs
union all
select cte.department, i.empid
from inputs i join
cte
on i.empid = cte.empid and i.department <> cte.department
)
select department,
row_number() over (order by min(empid)) as groupid
from cte
group by deparment;