Я давно работаю над этой проблемой и, похоже, не могу найти приемлемого решения.Проблема в том, что у меня есть много разных источников данных (не менее 20), которые я вычеркнул, чтобы получить те же шесть или семь столбцов данных, которые мне нужны.Моя цель - создать «вселенную», включающую все элементы, перечисленные в каждом источнике данных.Большая часть данных указана в нескольких источниках, а некоторые только в одном или двух источниках.Мне нужно следить за тем, какие источники имеют какие предметы, а также.В конечном счете, моя цель - таблица с каждым элементом в «юниверсе» в одном столбце, за которым следует ряд столбцов, отмечающих каждый источник, в котором он был идентифицирован (т.е. столбец для источника 12 получает «x», если источник 12 содержит текущийвещь).Кроме того, есть столбцы, в которых есть некоторая информация об элементах (их официальное название).Все элементы имеют уникальный номер, но имеют разные имена, поэтому в итоговой таблице, которую я создаю, мне нужно перечислить имя из источника с наивысшим приоритетом.Таким образом, если элемент находится в источнике 1, используйте имя, указанное в источнике 1;если нет, но он находится в источнике 2, используйте имя, указанное для элемента в источнике 2;и т. д.
Я работаю над этим в Microsoft Access, и до недавнего времени мне удавалось объединить все мои многочисленные исходные таблицы по уникальному номеру и выполнить большой вложенный оператор Iif, чтобы получитьимя в порядке приоритета источников, например,
Iif(Not Null(Source1.ItemName), Source1.ItemName,
Iif(NotNull(Source2.ItemName), Source2.ItemName,
Iif(...... ))))
Однако теперь у меня возникла проблема, поскольку я добавлял больше источников.Доступ ограничивает, насколько вложенными могут быть операторы Iif.Итак, я попробовал несколько разных решений.Я пытался с помощью VBA выполнить запрос на выборку для каждой исходной таблицы в порядке приоритета, пока не нашел запись, которая соответствует текущему уникальному номеру, и вернул имя элемента, указанное в источнике с наивысшим приоритетом, в котором он был найден.Проблема в том, что эта функция должна запускаться несколько раз для каждого уникального номера, так как есть несколько свойств в дополнение к имени элемента.Это приводит к очень медленному запросу.
Еще одна альтернатива, которую я попробовал, которая работала хорошо (но позже потерпел неудачу по другой причине, которую я объясню), заключалась в создании самостоятельного соединения.У меня был один запрос (query1) сделать объединение уникального номера, имени элемента и других свойств из всех источников, а также добавить столбец для ранга источника.Затем другой запрос (query2) имел подзапрос, который сгруппировался по уникальному номеру и выбрал минимальный ранг источника, который был внутренне присоединен к query1, чтобы получить остальную часть записи, перечисленной в запросе 1 для источника с самым высоким рейтингом.Однако проблема заключается в том, что в моем последнем запросе мне нужно взять эту информацию и добавить флаги, указывающие, в каких источниках найден элемент, а для этого требуется около 20 левых соединений.Кроме того, в некоторых источниках есть данные, которых нет в других, поэтому я не могу просто добавить эти столбцы в объединение query1.Итак, хотя я решил проблему с несколькими вложенными Iif, у меня все еще есть проблема с требованием слишком большого количества соединений.
Что я могу сделать, чтобы получить итоговую таблицу со всеми свойствами элемента, а также исходными столбцами?