簡體   English   中英

ms訪問合並行

[英]ms access combining rows

這似乎應該是一個簡單的解決方案,但由於某些原因,我無法解決這個問題。

我有一個表,該表具有USER_FULL_NAME作為主鍵,右側有15列各種指標。 在某些情況下,多個USER_FULL_NAME的拼寫有誤,但實際上應該匯總到同一行中。 就是 “ David Hands”可以拼寫為“ Davide Handes”,“ Bobby Orr”可以拼寫為“ Boby Or”。 該表中總共大約有150行,但是有大約136個唯一的USER_FULL_NAME

我如何編寫SQL查詢以將150行合並為唯一的136行,其中實際上應該合並的USER_FULL_NAME已合並?


我將另一列添加到名為TPS_User_names的矩陣表中,其中一列用於USER_FULL_NAME ,另一列用於DUPLICATE_USER_FULL_NAME 這是我提出的查詢,但似乎不起作用:

select

tun.user_full_name,

sum(ad.processed_mss)

from all_data ad left join tps_user_names tun on ad.user_full_name = tun.user_full_name and ad.user_full_name = tun.duplicate_user_full_name

where ad.user_full_name = 'A' and ad.user_full_name = 'A1'

group by tun.user_full_name

即使實際上很容易發現“相似”並因此假定為相同的名稱,這在實踐中也很難解決這個瑣碎的問題。

考慮一下-如果您要通過算法執行此操作,則可能會有成千上萬的臨界情況需要您或計算機進行呼叫:喬恩·史密斯與約翰·史密斯還是喬恩·P·史密斯一樣嗎? 也許。 也許不吧。

除非您有其他標識符,否則無法知道,這意味着您將很難從中獲取有意義的匯總。 進行模糊文本匹配的一種方法是計算Levenshtein距離,這是一種量化兩個字符串彼此之間的接近程度的方法,但是由於上述原因,您仍然可能會得到誤報。

如果您的問題是重復出現的問題(例如,需要頻繁更新),則可能需要重新考慮數據庫結構,並擁有一個不是實際名稱的主鍵,並查看如何將新條目添加到表中。 如果可能的話,這是評估是否正在使用新用戶名的理想時間。

如果要取消,我將查詢出重復的16行,並分別進行評估。

嚴格來說,這不是一種編碼解決方案,但是您可以創建一個矩陣表,該表具有兩列,即重復的USER_FULL_NAME和實際的USER_FULL_NAME,請向該表LEFT JOIN插入,並在進行匯總時使用實際的USER_FULL_NAME。 imo是缺少重新訪問架構或糾正表本身中的錯誤的最佳方法。 在這種情況下,您可以在矩陣表中添加一行,而不用更改代碼。 (還應注意,您可以使用涉及矩陣表的臨時步驟來重新標准化原始表。除了關鍵關系問題之外,您還可以創建矩陣,提取匯總查詢,然后使用此步驟重新插入/更新原始表表。)

編輯:當您提供代碼后,可以進行以下修改以將新表集成到混合表中:

SELECT    Nz(tun.user_full_name, ad.user_full_name) As user_full_name_agg,
          SUM(ad.processed_mss)
FROM      all_data ad LEFT JOIN tps_user_names tun
          ON ad.user_full_name = tun.duplicate_user_full_name
GROUP BY  Nz(tun.user_full_name, ad.user_full_name);

Nz將從找到的tun.user_full_name或ad.user_full_name中選擇第一個非空值。 因此,對於騙子,它將使用在tun中找到的合並的user_full_name,對於其他人,將使用廣告中的一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM