SQL查找两个表之间匹配的大多数行

我正在使用SQL Server 2012我有两个表,如下所示

《SQL查找两个表之间匹配的大多数行》

表1和表2都有许多组,由组列表示.组的名称可能在两个表中都匹配,但可能不匹配.重要的是找到表2中具有与Table1上的组中的成员匹配的最多成员的组.

我首先尝试使用vlookup执行此操作,但问题是vlookup会拉出Group列中具有匹配项的第一个条目,而不是具有最多匹配项的组.在vlookup下面会拉BBB,但正确的结果是CCC.

可能会发生联系. Table2上可能有多个匹配Table1的组具有相同数量的成员,因此最好的方法是计算匹配数,但是有数千个组,因此排序和筛选具有计数的列并不理想.我需要类似于case语句的内容,如果有MAX(匹配),那么Table1将在派生列BestMatch中显示具有MAX(Match)的组名.如果列可以显示表2中具有MAX的所有组(匹配可能是一个或多个),那将是最理想的.也许它可以用逗号分隔.

如果没有,如果专栏可以说领带,我可以寻找领带,如果这是最好的选择,那将是理想的,当单词tie出现时它会重复除了每个匹配的成员之外,所以我将知道寻找组匹配哪些帐户和匹配的数量.

最佳答案 我们真的可以用一些预期的输出来帮助澄清这个问题.

但是,如果我理解正确,那么此查询将使您接近所需的结果:

;with cte as
(    SELECT t1a.[group] AS Group1
          , t2a.[Group] AS Group2
          , RANK() OVER(PARTITION BY t1a.[group] 
                            ORDER BY COUNT(t2a.[Group]) DESC) AS MatchRank
       FROM Table1 t1a
       JOIN Table2 t2a
         ON t1a.member = t2a.member
   GROUP BY t1a.[group], t2a.[GRoup])
 SELECT * 
   FROM cte
  WHERE MatchRank=1

查询不识别关系,但会显示任何绑定的结果……

如果您是公用表表达式的新手(; with语句),则有一个有用的描述here.

点赞