MS Access. Добавление данных в одну таблицу из нескольких

Настройки MS Office, Open Office и пр. офисного ПО. Полезные советы и пр. То, чего не найдешь в бескрайних просторах Интернета. Решения тех проблем, которые не решаются типовыми ответами, которые можно получить в техподдержке Майкрософта - а именно: переустановить продукт или купить какой-ть другой лицензионный диск.


Модератор: UncleFather

Аватара пользователя
UncleFather
Site Admin
Сообщения: 1505
Зарегистрирован: 17 авг 2004 16:20, Вт
Контактная информация:

MS Access. Добавление данных в одну таблицу из нескольких

Сообщение UncleFather »

Задача:

Имеется база данных MS Access. В ней несколько однотипных таблиц. Ну, например, биллинговые таблицы (таблицы детализации звонков и смс) разных телефонных номеров. Необходимо объединить их (а точнее - объединить данные этих таблиц) в одну с такими же полями, как в исходных, для дальнейшего анализа.

Имена исходных таблиц соответствуют телефонному номеру, детализация которого находится в этой таблице. К примеру, пусть это будет пять номеров: 1234567890, 1234567891, 1234567892, 1234567893, 1234567894.

Поля исходных таблиц:

  • Дата

  • Время

  • Услуга

  • Телефон

  • Количество

  • Стоимость (руб)

В итоговую таблицу кроме существующих полей, необходимо добавить новое поле, идентифицирующее номер, детализацию которого мы добавляем. В нашем случае это будет имя таблицы детализируемого (если есть такое слово) номера.

Решение:

К сожалению, такой запрос невозможно создать в конструкторе MS Access, поэтому придется воспользоваться языком структурированных запросов SQL.

Если мы создаем новую таблицу с именем, например «Common1», то SQL запрос будет выглядеть так:

Код: Выделить всё

SELECT * INTO Common1
FROM 
(
SELECT [1234567890].Дата, "1234567890" AS Источник, [1234567890].Время, [1234567890].Услуга, [1234567890].Телефон, [1234567890].Количество, [1234567890].[Стоимость (руб)]
FROM 1234567890
UNION
SELECT [1234567891].Дата, "1234567891" AS Источник, [1234567891].Время, [1234567891].Услуга, [1234567891].Телефон, [1234567891].Количество, [1234567891].[Стоимость (руб)]
FROM 1234567891
UNION
SELECT [1234567892].Дата, "1234567892" AS Источник, [1234567892].Время, [1234567892].Услуга, [1234567892].Телефон, [1234567892].Количество, [1234567892].[Стоимость (руб)]
FROM 1234567892
UNION
SELECT [1234567893].Дата, "1234567893" AS Источник, [1234567893].Время, [1234567893].Услуга, [1234567893].Телефон, [1234567893].Количество, [1234567893].[Стоимость (руб)]
FROM 1234567893
UNION
SELECT [1234567894].Дата, "1234567894" AS Источник, [1234567894].Время, [1234567894].Услуга, [1234567894].Телефон, [1234567894].Количество, [1234567894].[Стоимость (руб)]
FROM 1234567894
) ;

Если же мы добавляем записи в уже существующую таблицу, с тем же именем «Common1», то синтаксис SQL запроса будет такой:

Код: Выделить всё

INSERT INTO Common1 ( Дата, Источник, Время, Услуга, Телефон, Количество, [Стоимость (руб)] )
Select * FROM
(
SELECT [1234567890].Дата, "1234567890" AS Источник, [1234567890].Время, [1234567890].Услуга, [1234567890].Телефон, [1234567890].Количество, [1234567890].[Стоимость (руб)]
FROM 1234567890
UNION
SELECT [1234567891].Дата, "1234567891" AS Источник, [1234567891].Время, [1234567891].Услуга, [1234567891].Телефон, [1234567891].Количество, [1234567891].[Стоимость (руб)]
FROM 1234567891
UNION
SELECT [1234567892].Дата, "1234567892" AS Источник, [1234567892].Время, [1234567892].Услуга, [1234567892].Телефон, [1234567892].Количество, [1234567892].[Стоимость (руб)]
FROM 1234567892
UNION
SELECT [1234567893].Дата, "1234567893" AS Источник, [1234567893].Время, [1234567893].Услуга, [1234567893].Телефон, [1234567893].Количество, [1234567893].[Стоимость (руб)]
FROM 1234567893
UNION
SELECT [1234567894].Дата, "1234567894" AS Источник, [1234567894].Время, [1234567894].Услуга, [1234567894].Телефон, [1234567894].Количество, [1234567894].[Стоимость (руб)]
FROM 1234567894
) ;

То есть ничего необычного, просто те строки данных, которые мы вставляем в новую таблицу, мы как-бы выделяем в SQL коде в отдельный запрос.

В итоге получаем сводную таблицу с данными всех таблиц из нашей БД и с полем «Источник», в котором указан анализируемый номер (он же - имя таблицы, из которого взята эта строка данных).


Alexander A. Manaeff©

Понравилась статья? Будем крайне признательны за репосты в соцсетях! Материально поддержать проект можно здесь

Мои странички:
ВКонтакте
Одноклассники
Youtube
Facebook
Instagram

Изображение
Изображение
Изображение
Изображение