2015-04-23 185 views
1

我有1个表。如果ID有多条记录,我想开发一个查询来过滤掉Dog记录。如果身份证只有1条记录,则保留狗记录。Microsoft Access:2记录根据特定标准排除1

ID | AnimalType 
401 | Dog 
401 | Cat 
401 | Bird 
402 | Dog 
403 | Cat 
404 | Dog 
404 | Bird 

查询会的结果...

ID | AnimalType 
401| Cat 
401| Bird 
402| Dog 
403| Cat 
404| Bird 
+0

需要更好的描述。 – PaulFrancis

+0

谢谢@PaulFrancis。我用最终结果编辑了描述。这有帮助吗?对不起,这是我在这里的第一个问题。 – Kmart6700

+0

你只担心**狗**未来你想消除什么**猫**和**狗**?为什么不用ID 401?为什么狗ID 402而不是404?提供样本数据很好,但给一些真正有意义的数据。 – PaulFrancis

回答

1

这里是实现这个的一种方法:

SELECT A.ID, A.AnimalType 
FROM tblAnimals A 
INNER JOIN (SELECT ID, COUNT(1) as IDCount FROM tblAnimals GROUP BY ID) T 
    ON A.ID = T.ID 
WHERE NOT (T.IDCount>1 and A.AnimalType='Dog') 

的基本理念是让每ID计数记录在子查询中,那么我们可以应用确切的逻辑来筛选出案例,如果“动物是一只狗,并且该记录有多个记录”。

演示:http://www.sqlfiddle.com/#!6/db6a9/2(在SQL Server中,无法访问,但道理是一样的)

+0

非常感谢。这工作! – Kmart6700

1

另一种方式,这将被使用NOT EXISTS功能,当你打了狗的记录,以确定是否有任何其他完成动物存在相同的ID:

SELECT ID, AnimalType 
FROM Animals t1 
WHERE AnimalType <> 'Dog' Or NOT EXISTS (SELECT ID FROM Animals t2 WHERE t2.ID = t1.ID And AnimalType <> 'Dog');