Используя ваши образцы данных для таблицы отправлений, это вывод следующего запроса SELECT.
PQT IDNUSER user_name num_matches
BNC 001 Bob 2
BNC 002 2
SELECT
d.PQT,
d.IDNUSER,
Nz([Name]," ") AS user_name,
Count(*) AS num_matches
FROM Departure AS d
GROUP BY
d.PQT,
d.IDNUSER,
Nz([Name]," ");
Однако в вашем вопросе упоминалось удаление дубликатов, поэтому я не знаю, что еще нужно сделать на этом этапе. Я не понимаю, как вы можете различить 2 ряда Боба ... какой из них отбросить, а какой оставить. Это было бы возможно, если бы у нас был уникальный столбец (например, первичный ключ), чтобы различать их. В качестве альтернативы вы можете сохранить выходные данные этого запроса GROUP BY в другой таблице с помощью пользовательского интерфейса Access, который называется «запрос на добавление». Шаблон для такого запроса будет выглядеть примерно так:
INSERT INTO OtherTable (
PQT,
IDNUSER,
user_name,
num_matches
)
SELECT
d.PQT,
d.IDNUSER,
Nz([Name]," ") AS user_name,
Count(*) AS num_matches
FROM Departure AS d
GROUP BY
d.PQT,
d.IDNUSER,
Nz([Name]," ");
Обратите внимание, что я объединил две строки с IDNUSER = 002 в одну строку. Это было мое лучшее предположение о том, что вы хотели. Однако я склоняюсь к тому, чтобы требовать значения в столбце «Имя» - другими словами, запретить Null. Но если вам нужно разрешить значения Null и обрабатывать их по-другому, скажите нам, что вы хотите.
Редактировать : Глядя на это снова, я не вижу реальной необходимости в функции NZ (). Эта версия правильно подсчитывает совпадения, даже если в группах указано значение Null для [Имя].
SELECT
d.PQT,
d.IDNUSER,
[Name] AS user_name,
Count(*) AS num_matches
FROM Departure AS d
GROUP BY
d.PQT,
d.IDNUSER,
[Name];