Пересмотр вопроса с целью избежать дальнейшего снижения репутации - извините за новость!
Я работаю над реляционной базой данных MS-Access, которую я создал на работе. Я самоучка, поэтому я очень ценю помощь!
Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что мне необходимо установить для каждой независимой транзакции (RefID) одно имя клиента. К сожалению, системы, которые мы используем, допускают существование нескольких Имен Клиентов в одном RefID. Например (выдержка из таблицы данных AR, которую я использую):
Ref ID Customer Name AR
20164444 Liberty 50
20164444 Liberty 75
20164444 Unicorn 100
20164444 Liberty 2500
Как видите, в одном RefID указано несколько имен клиентов. Я крутил свои колеса, пытаясь использовать сумму на поле AR и получая значение Max. К сожалению, каждый раз, когда я пытаюсь вставить его в новую таблицу, приходят имена обоих клиентов. Пример текущего используемого кода:
SELECT AR.Refid, max(AR.collectamount) as MCA
FROM AR
GROUP by AR.RefID
Этот код в настоящее время извлекает все RefIds и MCA или максимальную сумму сбора. Однако, если я попытаюсь ввести Имя клиента из моей таблицы сопоставления:
SELECT AR.Refid, Max(AR.collectamount) AS MCA, [Customer Mapping Table].[Parent Name]
FROM AR INNER JOIN [Customer Mapping Table] ON AR.chkrcvdfrom = [Customer Mapping Table].[Child Name - IE]
GROUP BY AR.Refid, [Customer Mapping Table].[Parent Name];
К сожалению, этот код доводит мои записи до 147 977, и я установил, что у меня должно быть только 145 395 уникальных записей. Это говорит о том, что дубликаты существуют в RefID. Пожалуйста, посмотрите следующий пример транзакции, в которой я обнаружил ошибку:
Ref ID Customer Name AR
20161100749 TBC 2517
20161100749 Unicorn 30
В конце концов, мне нужно, чтобы у всех 145 395 RefID было только одно имя клиента. Если есть два клиента, мне нужно Имя клиента с наибольшей активностью AR. Все данные, необходимые для того, чтобы сделать это возможным, находятся в файле данных AR - дамп данных нашей деятельности AR на основе каждого RefID. У меня есть дополнительная таблица, которая называется «Таблица сопоставления клиентов», где я создала отношения «Родитель-ребенок» с некоторыми из наших клиентов. Чтобы любое решение работало, мне нужно будет запросить таблицу AR, получить максимальное значение AR каждого клиента и изолировать каждый RefID только для одного родительского имени из таблицы сопоставления.
Редактировать: попытка минимального воспроизводимого примера
Основным источником моих данных является таблица AR - для целей этого упражнения поля следующие:
Ref ID Customer Name CollectAmount itemdesc
20161100749 TBC 2517 Ocean_Freight
20161100749 Unicorn 30 Insurance_Premium
20161100749 TBC 30 AMS Fee
20161100749 TBC 100 Pre-Pull
20161100749 TBC 225 Trucker Yard Storage
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 125 Handling Charge
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
Приведенный выше раздел можно скопировать и вставить в виде таблицы в MS-Access с именем «AR» - это будет отражать среду MS-Access, в которой я работаю.
Я взял код Ли и реализовал его следующим образом:
SELECT t1.*
FROM AR AS t1 INNER JOIN
(select t.refid, max(t.collectamount) as MCA
GROUP by AR.RefID)
As t2 ON (t1.collectamount = t2.mca) AND (t1.refid = t2.refid);
Когда я нажимаю «Выполнить», код ошибки не появляется, но запрос возвращает следующее:
Ref ID Customer Name CollectAmount itemdesc
20161100749 TBC 2517 Ocean_Freight
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
50180900002 Westlake 170 LOCAL_CARTAGE_DELIVERY
Конечной целью данных будет то, что каждый из двух предоставленных мною RefID будет представлен в двух уникальных строках только с полями max AR, Customer Name и itemdesc. Я боюсь, что это моя вина, и Филипп был прав, что я не предоставил достаточно информации. Надеюсь, это поможет прояснить вопрос.