2015-11-09 122 views
0

我有一個表格,列出了分配給它們的個人和聯繫人組。個人只能屬於一個羣體,但他們可以有多個聯繫人,反之亦然。一個例子是顯示如下:返回值每個組至少出現一次的所有行

+-------+------------+---------+ 
| Group | Individual | Contact | 
+-------+------------+---------+ 
| A  | J   | X  | 
| A  | K   | Y  | 
| A  | K   | Z  | 
| B  | L   | X  | 
| B  | M   | Y  | 
| C  | N   | Y  | 
| C  | N   | Z  | 
| C  | O   | Z  | 
| C  | P   | Z  | 
+-------+------------+---------+ 

我在工作的方式來拉的聯繫人列出一組在它們出現對這些個體的至少一個所有個人的報告。因此,對於如下所述的輸出,前述情況出現(每次接觸排序):

+-------+------------+---------+ 
| Group | Individual | Contact | 
+-------+------------+---------+ 
| A  | J   | X  | 
| A  | K   | X  | 
| B  | L   | X  | 
| B  | M   | X  | 
| A  | J   | Y  | 
| A  | K   | Y  | 
| B  | L   | Y  | 
| B  | M   | Y  | 
| C  | N   | Y  | 
| C  | O   | Y  | 
| C  | P   | Y  | 
| A  | J   | Z  | 
| A  | K   | Z  | 
| C  | N   | Z  | 
| C  | O   | Z  | 
| C  | P   | Z  | 
+-------+------------+---------+ 

在這裏,我們可以看到,接觸X被分配到各個Ĵ(A組)和個體L(B組)。 A組有2個人(J和K),B組有2個(L和M),所以聯繫人X會在他們的報告中看到個人J,K,L和M(每個人都在A和B組)。

我在想這將需要一個派生表分組,Group然後Contact但我只是無法讓我的頭。任何幫助,將不勝感激。

回答

0

雖然玩了幾件事,我想我可能已經解決了這個問題。這裏的關鍵環節是該組,所以通過創建基於聯繫人的團體和個人,然後連接兩個我得到這給期望的結果以下組的一些派生表:

select y.con, y.grp, x.ind from (select grp, ind from tmp group by grp, ind) as x join (select con, grp from tmp group by con, grp) as y on y.grp = x.grp order by y.con, y.grp, x.ind

不知道這是做到這一點的最好方式,但它有效。

相關問題