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

标签 sql sql-server count match

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

Match Table

表 1 和表 2 都有很多组,用组列表示。两个表中的组名可能匹配,但也可能不匹配。重要的是在表 2 中找到与表 1 上的组中的成员匹配的成员最多的组。

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

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

如果不是,如果专栏可以只说领带,我可以寻找领带,如果这是最好的选择,那将是理想的,当领带这个词出现时,除了每个匹配的成员之外,它还会重复,这样我就会知道寻找那些匹配哪些帐户以及匹配的帐户数量。

最佳答案

我们真的可以用一些预期的输出来帮助澄清这个问题。

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

;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 .

关于SQL 查找在两个表之间匹配的大多数行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37476340/

相关文章:

java - n个质数之和java,困惑

javascript - 如何处理参数化查询中的空用户输入?

mysql - 涉及子查询的查询

sql - 如何测试一行中引用特定列的一系列相等的 X 配对行?

sql-server - 为什么 Transact-SQL 中的递归 CTE 需要 UNION ALL 而不是 UNION?

java - JPA事务不回滚

php - 单击元素时如何更新表格行+1?

sql - += 在 SELECT 子句中;常数与列

asp.net - 使用Azure Data Studio从容器查看SQL Server

MySQL数据库优化