为独特团队创建teamID

时间:2016-08-11 22:40:42

标签: sql db2

所以我有一张表格,显示该员工和该员工的所有团队成员,如此

empl    team_member
a       b
a       c
b       a
b       c
c       a
c       b 
x       z
z       x
y       w
y       q
w       y
w       q
q       y
q       w

我理想的想要是创建一个看起来像这样的视图

empl    team
a       1
b       1
c       1
x       2
z       2
y       3
w       3
q       3

因此,查看第一个表,您可以看到A和C是相关的,C和A是相关的,这是相同的。我想进行每次组合并只是制作一个ID来说明那些人属于同一个团队。有谁知道如何使用DB2将第一个表数据转换为第二个?

1 个答案:

答案 0 :(得分:0)

你可以试试这个来得到你想要的东西:

select empl, dense_rank() over(order by case when min_m < empl then min_m else empl end) as team
from (
  select empl, min(team_member) as min_m
  from my_table
  group by empl
) as a

但我非常同意雷 - 有一张桌子上有所有可能的关系,这是一个非常糟糕的设计。

  1. 非常过分。例如,如果您将拥有包含100个成员的团队,那么您的表将包含100 * 99 = 9900行。在设计良好的情况下,它只有101行(团队为1行,员工为100行)。
  2. 这种表格很容易出现不一致。例如,你可能会意外地得到A是B的队友的情况,但反之则不然。
  3. 您可能需要维护新表并按视图替换当前表以提供一些兼容性。