2017-07-30 44 views
1

我有下面的表1,並且想要製作一張表,顯示有多少朋友Ent1與來自Ent1的任何其他人有共同之處。例如A(AAA的簡稱)有朋友B,C,D,E,F,而B有朋友A,C,E,F。他們有C,E,F共同所以結果應該是AAA BBB 3計數共同的朋友/節點

這可以在acces/SQL中完成嗎?我不知道......

表1

Ent1 Ent2 link 
AAA BBB friend 
AAA CCC friend 
AAA DDD friend 
AAA EEE friend 
AAA FFF friend 
BBB AAA friend 
BBB CCC friend 
BBB EEE friend 
BBB FFF friend 
CCC AAA friend 
CCC BBB friend 
CCC EEE friend 
CCC FFF friend 
DDD AAA friend 
DDD KKK friend 
DDD LLL friend 
EEE AAA friend 
EEE BBB friend 
EEE CCC friend 
FFF AAA friend 
FFF BBB friend 
FFF CCC friend 
KKK DDD friend 
LLL DDD friend 

結果應該是:

AAA BBB 3 
AAA CCC 3 
AAA DDD 0 
AAA EEE 2 
AAA FFF 2 
AAA KKK 1 
AAA LLL 1 
BBB CCC 3 etc... 

回答

0

呀,是可以做到的。我有點討厭你的桌子,我覺得它可以被標準化爲兩張桌子來更好地工作,但我現在沒有想出如何現在。因此,這裏是如何與當前表做在SQL模式:

select s.Person_1, s.Person_2, count(*) as tot 
    from 
    (select 
     a.Ent1 as Person_1 
     , a.Ent2 as Common_friend 
     , b.Ent1 as Person_2 
     from [Table1] as a 
    inner join [Table1] as b 
    on a.ent2 = b.ent2 
    where a.ent1 <> b.ent1) as s 
group by s.Person_1, s.Person_2 

這種工作方式是,子表s得到所有你想要通過自加入您的表計數的鏈接(該where a.ent1 <> b.ent1使得它如此你不會把一個人計算在內)。然後,外部查詢計算對之間的鏈接數量。此代碼將給出僞重複,因爲它將AAA作爲第一人與BBB作爲第二人之間的鏈接計算爲與第一人不同的BBB和第二人的AAA。我沒有想出一個簡單的方法來解決這個問題,但是你想要的數據會在那裏。

+0

我瞭解你對桌子的看法,但是我必須從哪裏開始。代碼看起來很好,我儘快把它放到測試中,感謝給我的不僅僅是一個基礎。我也認爲複製表格並與兩者一起工作可能會解決一些問題 我也剛剛意識到只有當結果數量不超過1000條記錄爲(1000 * 1001)/ 2 = 500500條記錄時纔可能輸出。 再次感謝! – Grt

+0

試過SQL和它上的錯誤!它爲什麼在那裏?刪除它並沒有得到示例中顯示的輸出。 – June7

+0

對於TSQL,'!='不相等,我忘了Access使用'<>'。我相應地更新了我的答案。 – Rominus