2015-04-23 3 views
1

У меня есть 1 стол. Я хочу разработать запрос, который отфильтровывает запись 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') 

Основная идея заключается в том, чтобы получить количество каждого идентификатора записи в подзапросе, тогда мы можем применить точную логику фильтрации случая, если «животное - собака, и для этого идентификатора имеется более одной записи».

Демо: 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'); 
Смежные вопросы