2015-04-23 176 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');