Идентификация повторяющихся значений при использовании JOIN в Microsoft Access

#sql #ms-access

#sql #ms-access

Вопрос:

У меня есть 2 таблицы, которые содержат значения для клиентов. Первая таблица содержит имена клиентов, а вторая содержит информацию, относящуюся к клиенту, например транзакции.

Первая таблица выглядит следующим образом

 CustomerID    Name
1             Joe
2             Jane
  

Вторая таблица выглядит следующим образом

 TransactID    CustomerID    Reference
1             1             REF123
2             2             REF123
3             1             REF321
  

Мне нужно иметь возможность идентифицировать все дубликаты в ссылочном столбце, а также клиента, которому он принадлежит, например, Джо, Джейн

Код, который у меня есть на данный момент, выглядит следующим образом

 SELECT o.name, COUNT(p.reference) as RefCount
FROM (t_cust as o
INNER JOIN t_custprop as p
         ON o.customerid = p.customerid)
GROUP BY o.name, p.reference
HAVING (COUNT(p.reference)>1) 
ORDER BY o.name ASC
  

Поскольку я не знаю возможных значений, которые могут быть дубликатами, приведенный выше код не возвращает имя клиента и ссылку, которая может быть дубликатом.

Комментарии:

1. Не уверен, есть ли у Access DINSTINCT инструкция?

2. Попробуйте изменить COUNT(p.reference) на COUNT(*), чтобы подсчитать количество строк. Сделайте это как в списке выбора, так и в предложении having.

3. Какой набор результатов вы ожидаете от своего примера? Вы хотите REF123, Joe и REF123, Jane ?

Ответ №1:

Группировка по элементу, который вы подсчитываете, всегда приведет к тому, что количество будет равно 1, что исключается вашим предложением having . Это должно сработать:

 SELECT o.name, p.reference
FROM t_cust o
    INNER JOIN t_custprop p ON o.customerid = p.customerid
WHERE p.reference IN (
    SELECT p2.reference
    FROM t_custprop p2
    GROUP BY p2.reference
    HAVING COUNT(p2.customerid) > 1
    )
ORDER BY o.name ASC
  

Комментарии:

1. Спасибо. Я попробовал это и получил сообщение об ошибке Too few parameters. Expected 2

2. Ничто в этом заявлении не вызывает функции, требующие параметров, за исключением count() . Я попробовал это на своей стороне, используя предоставленные вами тестовые данные, и получил ожидаемые результаты Jane / Joe для REF123. Если есть проблема в дальнейшем, изолируйте ее и задайте новый вопрос.