2016-08-11 47 views
0

所以我有一個表,顯示僱員和所有teammembers該員工這樣獨特的團隊創建teamID

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將第一個表數據轉換爲第二個表數據?

+0

不清楚DB2的具體情況,但需要一個單獨的'team'表,除了'name'之外,還有一個PK列(例如'id'),然後創建一個外鍵列'team_id'在引用'team.id'列的'empl'表中。此外,您需要遷移數據並更新客戶端代碼,因爲您無法簡單地更改基礎數據庫並期望所有內容都能立即適應。 – ray

+0

不幸的是,我實際上沒有列出團隊的表格。我所擁有的只是第一張顯示empl1和他/她的team_members之間關係的表格。問題是我需要一個快速的方法來拉動同一團隊中的每個人 – Wizuriel

+0

你不能創建表嗎?對數據庫的更改(即使只是更新現有的列名稱)不可避免地級聯到系統的其他區域(例如其他查詢,使用它的代碼等),特別是如果數據庫已在生產環境中存在數據。我不確定你對「快速」方式的期望,但「快速」通常跟着「壞主意」。就你而言,你顯然正試圖改變存儲在列中的數據類型。 – ray

回答

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隊友的情況,但反之亦然。

可能您必須維護新表並通過視圖替換當前表以提供一些兼容性。