Access数据库:获取两列无重复值的唯一组合(附示例)
在Access中获取满足双列唯一的组合
要从Access数据库表中提取两列的唯一组合,同时保证结果集中的A列、B列各自无重复值(即每个A值仅出现一次,每个B值也仅出现一次),可以通过以下两种方法实现:
方法一:使用FIRST()函数(兼容多数Access版本)
先提取所有不重复的(a,b)组合,再为每个A值选取第一个对应的B值,最后筛选出B值唯一的行,确保结果中A、B列都无重复。
假设你的表名为YourTable,替换为实际表名即可:
SELECT t.a AS A, t.b AS B FROM ( -- 为每个a取第一个不重复的b值 SELECT a, FIRST(b) AS b FROM ( -- 先获取所有不重复的(a,b)组合 SELECT DISTINCT a, b FROM YourTable -- 可添加ORDER BY指定b的选取顺序,比如ORDER BY a, b ) AS DistinctPairs GROUP BY a ) AS FirstBPerA -- 筛选出b值唯一的行,确保B列无重复 WHERE ( SELECT COUNT(*) FROM ( SELECT a, FIRST(b) AS b FROM (SELECT DISTINCT a, b FROM YourTable) AS DistinctPairs GROUP BY a ) AS Temp WHERE Temp.b = FirstBPerA.b ) = 1;
方法二:使用ROW_NUMBER()(适用于Access 2016及以上版本)
利用窗口函数为每个A值对应的B值排序,取第一个后再筛选B值唯一的行:
WITH UniquePairs AS ( SELECT DISTINCT a, b FROM YourTable ), RankedPairs AS ( SELECT a, b, ROW_NUMBER() OVER (PARTITION BY a ORDER BY b) AS rn FROM UniquePairs ), FirstPerA AS ( SELECT a, b FROM RankedPairs WHERE rn = 1 ) SELECT a AS A, b AS B FROM FirstPerA WHERE b IN ( SELECT b FROM FirstPerA GROUP BY b HAVING COUNT(*) = 1 );
结果说明
以上两种方法都会返回你预期的结果:
A B ------- --------- 1 2 2 1
内容的提问来源于stack exchange,提问作者user3075359
相关产品推荐
相关产品推荐

