首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >CTE对集团不同部门的员工-多到多

CTE对集团不同部门的员工-多到多
EN

Stack Overflow用户
提问于 2014-10-24 01:29:29
回答 1查看 65关注 0票数 1

有人能帮忙吗!我似乎解决不了这个难题?

输入表

代码语言:javascript
运行
复制
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名员工不能在两个部门中。

代码语言:javascript
运行
复制
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创建的小组没有任何其他部门的产品,那么我们就可以停止了。

注意:,这不是一个“正常”组,因为我们不想让我们创建的任何两个组都有相同的员工。

逻辑:

Step1: EmpID 50在部门4和5之间很常见。所以第4和第5组在一起。

Step2:,这意味着4&5集团有50,30,45,51,52,53名独特的员工。

Step3:,但是等等!Department 6的EmpID 53与step2组成的4& 5集团有共同之处

Step4:集团4,5,6部门。新集团拥有员工50,30,45,51,52,53,54人。

Step5:,但是等等!部门7的EmpID为54,这与在step4成立的集团是很常见的。所以把他们聚在一起

这还在继续..。直到我们没有不分两组的员工。因此,在本例中,第7组也需要“合并”到第4步中提到的组中。

EN

回答 1

Stack Overflow用户

发布于 2014-10-24 03:07:44

这是一个需要递归CTE的图遍历问题。我认为这是一种方法:

代码语言:javascript
运行
复制
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;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26540127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档