MS-Access 2007:查询在另一个字段中具有两个或更多不同值的名称

时间:2016-03-11 04:10:04

标签: sql ms-access

Hello&提前谢谢你。

我有一个访问数据库,其中包含有关我们捕获的哺乳动物的以下信息。每个捕获都有一个唯一的ID,它是捕获表的主键:“capture_id”。哺乳动物(取决于物种)有耳标,我们用它来逐年和每天跟踪它们。它们位于名为“id_code”的字段中。我有哺乳动物的性别,因为它是在捕获时记录在另一个叫做性的领域。

我想要一个会返回id_code的所有实例的查询,如果性别发生变化,那么该ID就会改变一次。

示例:动物E555被捕获4次,有3次将此动物记录为F,一次记录为M.

我设法通过堆叠大约5个查询来显示此信息(查询重新捕获的动物 - >查询来自第一个查询的所有动物记录 - >查询id的唯一组合& sex(通过仅使用这两列并且需要“唯一值”) - >查询仅从最后一列中提取重复的id值并拉回这些ID的所有捕获记录)。 HOwever,这显然不是正确的方法,它是不可更新的(我需要这是因为这是用于数据质量控制),并且由于某种原因它还返回每个记录的重复...

我意识到这可以通过其他两种方式解决:

  • 使用R来提取这些记录(我希望这些数据都不必离开数据库,因为我们正在努力将它收集到一个地方35年后收集!我的老板不能使用R而且我是季节性的,所以我希望他只需打开一个查询)
  • 创建一个跟踪所有动物id作为动物索引的表。然而,这会使输入数据变得更加困难,并且还需要有人返回20,000条记录并为每个记录创建一个全新的动物ID,因为你不能给田鼠提供耳标。所以他们没有在现场获得唯一的标识符。

帮助!

1 个答案:

答案 0 :(得分:1)

使用单个查询非常简单。作为奖励,查询将是可更新的,不可复制的,并且易于使用:

SELECT mammals.ID, mammals.Sex, mammals.id_code, mammals.date_recorded
FROM mammals
WHERE mammals.id_code In 
 (select id_code from 
  (select distinct id_code, sex from [mammals]) a 
  group by id_code 
  having count(*)>1
 );

您在子查询中看到子查询的原因是因为Access不支持COUNT(DISTINCT)。对于任何其他“普通”数据库,您可以写:

SELECT mammals.ID, mammals.Sex, mammals.id_code, mammals.date_recorded
FROM mammals
WHERE mammals.id_code In 
 (select id_code
  from [mammals]
  group by id_code 
  having count(DISTINCT Sex)>1
 );