与第二个字段相关时在一个字段中查找完全匹配

时间:2020-01-18 23:07:32

标签: sql ms-access-2007

对于能帮助我对以下两个表格进行合理总结的问题,我表示感谢:

enter image description here

表1包含主要原始数据,其中FieldA与FieldB中的特定项目有关系。

相对于FieldA中的每个唯一项目,FieldB中的项目都是唯一的-也就是说,猫,狗,兔子,鸡只在FieldA的“ a”组下只会出现一次(它们可以出现在该字段的其他位置) 。同样,对于FieldA中的b,c和d项(所有FieldB项仅针对它们出现一次)。

Table2列出了Table1 FieldB中每个唯一项的总数,并由以下查询生成:

qryCount:

select FieldB, count(FieldB) AS FCount 
from Table1
GROUP BY FieldB;

我的问题: 用户在表1的FieldA中输入唯一值,然后查询应在FieldB(表1)中返回相对于表2中各自的FCount完全匹配的所有唯一值。

例如

  • 如果用户输入“ a,b,d”,由于cat(3),dog(2),rabbit(1)和ferret(1)的总数,查询将输出“ cat,dog,rabbit,雪貂”被满足。
  • 如果用户输入“ a,c”,由于满足了chicken(2)和rabbit(1)的总数,查询将输出“ chicken,rabbit”。
  • 如果用户输入“ b”,则该查询将不返回任何内容,因为相应的FieldB项也位于其他位置。

我确实在Excel中使用VBA解决了这个问题(构建命中表并查看是否满足用户输入的值各自的总计数),但是尽管我确实有使用Access SQL(2007)的经验,正在努力从VBA转换此想法。感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

此查询应为您提供所需的结果。它使用子查询来生成Table2的有效副本,但仅生成FieldA的所需值。然后将其连接到Table2,仅给出FCount值匹配的行:

SELECT t1.FieldB
FROM (SELECT FieldB, COUNT(FieldB) AS FCount
      FROM Table1
      WHERE FieldA IN ('a', 'b', 'd')
      GROUP BY FieldB) t1
INNER JOIN Table2 t2 ON t2.FieldB = t1.FieldB AND t2.FCount = t1.FCount

输出:

FieldB
cat
dog
ferret
rabbit

Demo on dbfiddle

相关问题