Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Объединение двух таблиц в MS Access - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Объединение двух таблиц в MS Access
GReeNbI4 Дата: Понедельник, 23.03.2015, 14:27 | Сообщение № 1
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
Добрый вечер, уважаемые форумчане.
Появился вопрос по MS Access. Есть две таблицы - одна ответственные, другая статусы.
Обе таблицы имеют поля id, дата начала и дата окончания и ответственного/статус за указанный промежуток времени. Периоды не совпадают. Т.е. ответственный может меняться со временем, а статус нет, и наоборот.
Ранее работал с двумя таблицами, теперь появилась необходимость в их объединении в одну.
В прилагаемом файле сделал таблицу итог, которая отображает то, что я хотел бы видеть - id, дата начала, дата окончания, статус, ответственный.
Но что-то своими силами решить проблему не могу.
Пытался через объединение двух таблиц с последующей "чисткой" ненужных значений. Но вариант получился достаточно громоздкий.
Размер исходных данных около 5 млн. строк в одной таблице и около 12 млн. в другой.
Решение необходимо в access.
Буду благодарен, если подскажете в каком направлении копать, чтобы сделать это объединение.
К сообщению приложен файл: 9951217.xlsx (11.6 Kb)
 
Ответить
СообщениеДобрый вечер, уважаемые форумчане.
Появился вопрос по MS Access. Есть две таблицы - одна ответственные, другая статусы.
Обе таблицы имеют поля id, дата начала и дата окончания и ответственного/статус за указанный промежуток времени. Периоды не совпадают. Т.е. ответственный может меняться со временем, а статус нет, и наоборот.
Ранее работал с двумя таблицами, теперь появилась необходимость в их объединении в одну.
В прилагаемом файле сделал таблицу итог, которая отображает то, что я хотел бы видеть - id, дата начала, дата окончания, статус, ответственный.
Но что-то своими силами решить проблему не могу.
Пытался через объединение двух таблиц с последующей "чисткой" ненужных значений. Но вариант получился достаточно громоздкий.
Размер исходных данных около 5 млн. строк в одной таблице и около 12 млн. в другой.
Решение необходимо в access.
Буду благодарен, если подскажете в каком направлении копать, чтобы сделать это объединение.

Автор - GReeNbI4
Дата добавления - 23.03.2015 в 14:27
Pelena Дата: Понедельник, 23.03.2015, 20:03 | Сообщение № 2
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
Здравствуйте.
Надо было, конечно, дать пример с бОльшим количеством данных, например, с разными id
Пока получилось так
К сообщению приложен файл: GReeNbI4.rar (21.6 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеЗдравствуйте.
Надо было, конечно, дать пример с бОльшим количеством данных, например, с разными id
Пока получилось так

Автор - Pelena
Дата добавления - 23.03.2015 в 20:03
GReeNbI4 Дата: Вторник, 24.03.2015, 14:34 | Сообщение № 3
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
Здравствуйте, Pelena.
Спасибо большое за Ваш ответ. На файле с примером расчет аналогичен тому, что я сделал руками.
Сегодня пытался разобраться с Вашим макросом, но, к сожалению, пока безуспешно. Ранее макросы в акцессе использовал только лишь для поочередного выполнения запросов (выборка, объединение, удаление). Завтра продолжу.
Пытался так же перенести данный макрос на рабочую базу, но попытка была неудачной. Раза 4 точно начинал все с начала, и опять ошибка. Выскакивает дебаггер и приехали.
Может есть вариант решения моей проблемы посредством выполнения ряда запросов? С запросами мне лично будет проще - и в работе и в дальнейшей возможной модификации.
За ранее спасибо.
 
Ответить
СообщениеЗдравствуйте, Pelena.
Спасибо большое за Ваш ответ. На файле с примером расчет аналогичен тому, что я сделал руками.
Сегодня пытался разобраться с Вашим макросом, но, к сожалению, пока безуспешно. Ранее макросы в акцессе использовал только лишь для поочередного выполнения запросов (выборка, объединение, удаление). Завтра продолжу.
Пытался так же перенести данный макрос на рабочую базу, но попытка была неудачной. Раза 4 точно начинал все с начала, и опять ошибка. Выскакивает дебаггер и приехали.
Может есть вариант решения моей проблемы посредством выполнения ряда запросов? С запросами мне лично будет проще - и в работе и в дальнейшей возможной модификации.
За ранее спасибо.

Автор - GReeNbI4
Дата добавления - 24.03.2015 в 14:34
TimSha Дата: Вторник, 24.03.2015, 14:48 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 627
Репутация: 94 ±
Замечаний: 0% ±

Excel 2013 Pro +
На файле с примером расчет аналогичен тому, что я сделал руками.

Не мешает еще разок проверить, и очень кропотливо - даты не бьют, однако...
ps Решение требуется в Аксе, а пример - в XL, почему? Где ваши попытки запросов , объединений данных в Аксе?


"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Ответить
Сообщение
На файле с примером расчет аналогичен тому, что я сделал руками.

Не мешает еще разок проверить, и очень кропотливо - даты не бьют, однако...
ps Решение требуется в Аксе, а пример - в XL, почему? Где ваши попытки запросов , объединений данных в Аксе?

Автор - TimSha
Дата добавления - 24.03.2015 в 14:48
Pelena Дата: Вторник, 24.03.2015, 14:57 | Сообщение № 5
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
Поэтому я и писала, что данных маловато для отладки. На какой строке ошибка появляется? Сделайте пример с реальной структурой.

Обычными запросами здесь вряд ли получится, потому что надо объединять даты по принципу все+все (UNION)
Хотя... попробую. Но на Вашем примере с реальной структурой и достаточным количеством данных

даты не бьют, однако

Например? Я не увидела


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеПоэтому я и писала, что данных маловато для отладки. На какой строке ошибка появляется? Сделайте пример с реальной структурой.

Обычными запросами здесь вряд ли получится, потому что надо объединять даты по принципу все+все (UNION)
Хотя... попробую. Но на Вашем примере с реальной структурой и достаточным количеством данных

даты не бьют, однако

Например? Я не увидела

Автор - Pelena
Дата добавления - 24.03.2015 в 14:57
RAN Дата: Вторник, 24.03.2015, 15:19 | Сообщение № 6
Группа: Друзья
Ранг: Экселист
Сообщений: 5660
Репутация: 1163 ±
Замечаний: 0% ±

2010
Например?

10000__ 01.01.2015__ 12.01.2015__ Иванов
10000__ 01.01.2015__ 09.01.2015__ Проблемный


Быть или не быть, вот в чем загвоздка!
 
Ответить
Сообщение
Например?

10000__ 01.01.2015__ 12.01.2015__ Иванов
10000__ 01.01.2015__ 09.01.2015__ Проблемный

Автор - RAN
Дата добавления - 24.03.2015 в 15:19
Pelena Дата: Вторник, 24.03.2015, 15:28 | Сообщение № 7
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
И? В чём ошибка?
До 9.01 Иванов - Проблемный
с 10.01 до 12.01 Иванов - Просроченный


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеИ? В чём ошибка?
До 9.01 Иванов - Проблемный
с 10.01 до 12.01 Иванов - Просроченный

Автор - Pelena
Дата добавления - 24.03.2015 в 15:28
GReeNbI4 Дата: Вторник, 24.03.2015, 15:54 | Сообщение № 8
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
На какой строке ошибка появляется?

Ошибка у меня появлялась в этой строке - Set rst1 = CurrentDb.OpenRecordset(sq1)
Хотя с вероятностью процентов 99, что это моя ошибка.
С реальным примером "из жизни" будет достаточно сложно. т.к. с недавних пор прикрыт и интернет (пишу уже с дома вечером) и отправка писем на внешние ящики.
Но постараюсь что-нить придумать.
 
Ответить
Сообщение
На какой строке ошибка появляется?

Ошибка у меня появлялась в этой строке - Set rst1 = CurrentDb.OpenRecordset(sq1)
Хотя с вероятностью процентов 99, что это моя ошибка.
С реальным примером "из жизни" будет достаточно сложно. т.к. с недавних пор прикрыт и интернет (пишу уже с дома вечером) и отправка писем на внешние ящики.
Но постараюсь что-нить придумать.

Автор - GReeNbI4
Дата добавления - 24.03.2015 в 15:54
GReeNbI4 Дата: Вторник, 24.03.2015, 18:00 | Сообщение № 9
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
10000__ 01.01.2015__ 12.01.2015__ Иванов
10000__ 01.01.2015__ 09.01.2015__ Проблемный

Ошибки никакой нет - статусы и ответственные не связаны между собой. При изменении одного другое может меняться, может не меняться.
 
Ответить
Сообщение
10000__ 01.01.2015__ 12.01.2015__ Иванов
10000__ 01.01.2015__ 09.01.2015__ Проблемный

Ошибки никакой нет - статусы и ответственные не связаны между собой. При изменении одного другое может меняться, может не меняться.

Автор - GReeNbI4
Дата добавления - 24.03.2015 в 18:00
GReeNbI4 Дата: Воскресенье, 29.03.2015, 10:31 | Сообщение № 10
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
Pelena,
Начали разбираться с Вашим решением.
Вопросы, которые возникли:
1) У Вас установлена связь между таблицами (Работа с базами данных - Схема данных). Ранее такого объединения не встречал. Если эту связь убрать, то макрос все равно считает. Нужна ли данная связь или ее можно убрать? Следует отметить, что один и тот же id может повторяться от 0 до бесконечности раз в каждой из таблиц, т.е. может быть статус, но не быть ответственного, быть один статус и один ответственный и один статус и десятки ответственных и соответственно наоборот.
2) переписать макрос на мою базу так и не получилось. Поэтому были добавлены мои данные в Ваш файл. Запустили макрос. Через 20 минут остановили. Посчиталось всего около 8 тыс. срок. Т.е. для полного расчета может уйти 2-3 часа, а может и более. Данную процедуру придется выполнять ежедневно.
Т.е. сейчас на обновление всех баз уходит около 35-45 минут, и минуты 3-5 на обновление данных в PowerPivot. Если приходить на работу в 8-30, то не позднее чем в 9-30 все данные уже обновлены (т.е. добавлена вчерашняя дата (обновление происходит ночью) и в мои данные внесены все изменения за прошедшие периоды (если таковое было)).
Сегодня добавлю файл-пример с большим количеством записей.
 
Ответить
СообщениеPelena,
Начали разбираться с Вашим решением.
Вопросы, которые возникли:
1) У Вас установлена связь между таблицами (Работа с базами данных - Схема данных). Ранее такого объединения не встречал. Если эту связь убрать, то макрос все равно считает. Нужна ли данная связь или ее можно убрать? Следует отметить, что один и тот же id может повторяться от 0 до бесконечности раз в каждой из таблиц, т.е. может быть статус, но не быть ответственного, быть один статус и один ответственный и один статус и десятки ответственных и соответственно наоборот.
2) переписать макрос на мою базу так и не получилось. Поэтому были добавлены мои данные в Ваш файл. Запустили макрос. Через 20 минут остановили. Посчиталось всего около 8 тыс. срок. Т.е. для полного расчета может уйти 2-3 часа, а может и более. Данную процедуру придется выполнять ежедневно.
Т.е. сейчас на обновление всех баз уходит около 35-45 минут, и минуты 3-5 на обновление данных в PowerPivot. Если приходить на работу в 8-30, то не позднее чем в 9-30 все данные уже обновлены (т.е. добавлена вчерашняя дата (обновление происходит ночью) и в мои данные внесены все изменения за прошедшие периоды (если таковое было)).
Сегодня добавлю файл-пример с большим количеством записей.

Автор - GReeNbI4
Дата добавления - 29.03.2015 в 10:31
Pelena Дата: Воскресенье, 29.03.2015, 11:24 | Сообщение № 11
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
А обязательно просматривать все 5 млн записей или достаточно изменений за прошедшую дату?


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеА обязательно просматривать все 5 млн записей или достаточно изменений за прошедшую дату?

Автор - Pelena
Дата добавления - 29.03.2015 в 11:24
GReeNbI4 Дата: Воскресенье, 29.03.2015, 11:35 | Сообщение № 12
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
В настоящее время обновляю все записи. Это с 1\1\2014.
Думаю можно разделить данные, т.е. выделить скажем последние три месяца, которые желательно обновлять ежедневно, т.к. различного рода правки бывают. Они конечно могут быть и по событиям установленным в прошлом году, но это происходит значительно реже.
Скажем таблицу за прошлый год обновлять ежемесячно, последний квартал ежедневно.
 
Ответить
СообщениеВ настоящее время обновляю все записи. Это с 1\1\2014.
Думаю можно разделить данные, т.е. выделить скажем последние три месяца, которые желательно обновлять ежедневно, т.к. различного рода правки бывают. Они конечно могут быть и по событиям установленным в прошлом году, но это происходит значительно реже.
Скажем таблицу за прошлый год обновлять ежемесячно, последний квартал ежедневно.

Автор - GReeNbI4
Дата добавления - 29.03.2015 в 11:35
GReeNbI4 Дата: Воскресенье, 29.03.2015, 11:39 | Сообщение № 13
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
Первоначально добавлял записи с 1\1\13, но решил сэкономить на времени и немного сжать файл. поэтому остались данные только после 1\1\14
 
Ответить
СообщениеПервоначально добавлял записи с 1\1\13, но решил сэкономить на времени и немного сжать файл. поэтому остались данные только после 1\1\14

Автор - GReeNbI4
Дата добавления - 29.03.2015 в 11:39
GReeNbI4 Дата: Воскресенье, 29.03.2015, 14:35 | Сообщение № 14
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
Добавил файл с разными договорами, статусами и ответственными.
Еще раз хотел обратить внимание на то, что договор может появиться в таблице со статусами, однако в таблице с ответственными может появиться либо позже, либо вообще не появиться.
Т.е. такие id_договора терять нельзя, пусть отображаются пустыми.
Даты не могут быть пустыми в таблице, т.е. не может быть установлена только дата начала и пустая дата окончания. Если дата окончания открытая, то я ограничиваю сегодняшней датой, т.е. dateserial(now();now();now()). Может есть вариант оптимальней, но этот способ работает :-)
К сообщению приложен файл: base001.rar (21.3 Kb)
 
Ответить
СообщениеДобавил файл с разными договорами, статусами и ответственными.
Еще раз хотел обратить внимание на то, что договор может появиться в таблице со статусами, однако в таблице с ответственными может появиться либо позже, либо вообще не появиться.
Т.е. такие id_договора терять нельзя, пусть отображаются пустыми.
Даты не могут быть пустыми в таблице, т.е. не может быть установлена только дата начала и пустая дата окончания. Если дата окончания открытая, то я ограничиваю сегодняшней датой, т.е. dateserial(now();now();now()). Может есть вариант оптимальней, но этот способ работает :-)

Автор - GReeNbI4
Дата добавления - 29.03.2015 в 14:35
GReeNbI4 Дата: Вторник, 31.03.2015, 14:00 | Сообщение № 15
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
Сегодня взял за основу макрос Pelena, точнее его начало.
Выбрал все возможные комбинации на id дат начала и дат окончаний.
Пытался в даты добавить еще строки (Дата начала -1) и (Дата окончания+1)
Но ряд дат все равно теряется.
Может есть какие-либо предложения по созданию таблицы?
 
Ответить
СообщениеСегодня взял за основу макрос Pelena, точнее его начало.
Выбрал все возможные комбинации на id дат начала и дат окончаний.
Пытался в даты добавить еще строки (Дата начала -1) и (Дата окончания+1)
Но ряд дат все равно теряется.
Может есть какие-либо предложения по созданию таблицы?

Автор - GReeNbI4
Дата добавления - 31.03.2015 в 14:00
Pelena Дата: Вторник, 31.03.2015, 14:13 | Сообщение № 16
Группа: Админы
Ранг: Местный житель
Сообщений: 19403
Репутация: 4554 ±
Замечаний: ±

Excel 365 & Mac Excel
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода.
Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.
К сообщению приложен файл: base001_v2.rar (35.4 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеУ Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода.
Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.

Автор - Pelena
Дата добавления - 31.03.2015 в 14:13
GReeNbI4 Дата: Среда, 01.04.2015, 13:37 | Сообщение № 17
Группа: Пользователи
Ранг: Новичок
Сообщений: 13
Репутация: 0 ±
Замечаний: 0% ±

2010
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода.

Данный пример я делал вручную, видимо допустил ошибки. Хотя проверял. Это моя ошибка, извиняюсь. В общей базе такого не может быть, т.е. программа не даст установить дату окончания меньше даты начала.
Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.

Спасибо за помощь. Смотрю, пытаюсь разобраться.
 
Ответить
Сообщение
У Вас в исходных данных есть несколько ошибок: дата начала превышает дату окончания. Я исправила, но надо ставить какую-то защиту от неверного ввода.

Данный пример я делал вручную, видимо допустил ошибки. Хотя проверял. Это моя ошибка, извиняюсь. В общей базе такого не может быть, т.е. программа не даст установить дату окончания меньше даты начала.
Получилось довольно громоздко, поэтому и не выкладывала раньше. На 5 млн строк несколько часов считать будет, и львиную долю времени занимает именно объединение по датам. Тем более пришлось ставить дополнительные проверки.

Спасибо за помощь. Смотрю, пытаюсь разобраться.

Автор - GReeNbI4
Дата добавления - 01.04.2015 в 13:37
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!