Создание запроса, формы или отчета в Access
Разделенная форма позволяет одновременно отображать данные в двух представлениях — в режиме таблицы и в представлении формы. Например, можно найти запись в режиме таблицы, а затем отредактировать ее в режиме формы.
- В области навигации выберите таблицу или запрос с данными.
- На вкладке Создание нажмите кнопку Другие формы и выберите пункт Разделенная форма.
Дополнительные сведения см. в разделе Создание разделенной формы.
Создание отчета
- На вкладке Создание нажмите кнопку Мастер отчетов.
- Выберите таблицу или запрос, дважды щелкните каждое нужное поле в списке Доступные поля, чтобы добавить его в отчет, и нажмите кнопку Далее.
- Дважды щелкните поле, по которому должна производиться группировка, и нажмите кнопку Далее.
- Заполните остальные страницы мастера и нажмите кнопку Готово.
Итоговый запрос из базы данных Access
Запросы позволяют не только выбирать записи из таблиц Access, но и вычислять различные статистические параметры. Например, можно подсчитать суммарное количество контактов и вывести даты первого и последнего контакта с каждым из людей, включенных в таблицу Контакты. Чтобы построить такой запрос в режиме конструктора, выполните следующие действия.
1. В окне базы данных щелкните на кнопке Запросы.
2. Дважды щелкните на значке Создание запроса в режиме конструктора.
3. В открывшемся окне диалога (рис. 17.6) выделите строку Контакты.
4. Щелчком на кнопке Добавить добавьте выбранную таблицу в верхнюю область конструктора запроса.
5. Выделите пункт Список и снова щелкните на кнопке Добавить.
6. Щелчком на кнопке Закрыть закройте окно диалога Добавление таблицы. Списки полей двух таблиц, соединенные линией связи, появятся в окне конструктора.
7. Щелкните на кнопке Групповые операции панели инструментов. В бланке запроса появится дополнительная строка Групповая операция, позволяющая выполнять статистические операции со значениями конкретных полей.
Рис. 17.6 . Добавление таблицы
8. Перетащите поле Фамилия в ячейку Поле первого столбца конструктора.
9. В ту же ячейку второго столбца перетащите поле Имя таблицы Контакты.
10. В третий, четвертый и пятый столбцы бланка запроса перетащите поле Дата таблицы Список (рис. 17.7).
Рис. 17.7. Запрос с групповыми операциями
11. В раскрывающемся списке ячейки Групповая операция третьего столб ца бланка запроса выберите пункт Min.
12. В той же ячейке четвертого столбца выберите пункт Мах.
13. В пятом столбце задайте групповую операцию Count. Групповые операции построенного запроса обработают все записи таблицы Список, соответствующие конкретному человеку из таблицы Контакты, и вместо самих данных таблицы Список выведут в соответствующее поле результата запроса только значение величины, вычисляемой по определенной формуле. Доступные групповые операции перечислены в табл. 17.1.
ТАБЛИЦА 17.1 . Групповые операции
Название | Функция |
Условие | Режим задания условия отбора для поля, но которому не выполняется группировка. Access автоматически делает такое поле скрытым |
Выражение | Вычисляемое поле, значение которого рассчитывается по сложной формуле |
Group By | Поле, определяющее группу записей, по которой вычисляются статистические параметры. К одной группе относятся все записи, для которых значения поля с режимом Group By (Группировка) одинаковы |
Last | Последнее значение в группе |
First | Первое значение в группе |
Var | Вариация значений поля |
StDev | Стандартное отклонение величин ноля от среднего |
Count | Количество записей, соответствующее ноле которых не содержит величины Null |
Мах | Максимальное значение |
Min | Минимальное значение |
Avg | Среднее значение поля |
Sum | Сумма значений поля по всем записям |
Примечание Поскольку в пятом поле запроса вычисляется количество записей, в ячейку Поле этого столбца можно поместить любое поле таблицы Список.
14. Щелкните на кнопке Вид, чтобы выполнить запрос. Появится таблица с пятью столбцами. Два первых столбца содержат фамилии и имена людей. По ним выполняется группировка, то есть расчет значений остальных полей запроса выполняется для записей таблицы Список, сопоставляемых с одним человеком. Как уже говорилось выше, соответствие контакта таблицы Список и человека из таблицы Контакты определяется полями Код_Контакты, с помощью которых осуществляется связь этих двух таблиц. Третий и четвертый столбцы запроса выводят соответственно дату первого (функция Min) и последнего (функция Мах) контакта с данным человеком. Пятый столбец содержит количество записей в таблице Список (функция Count), соответствующих. данному человеку, то есть число контактов с ним. Единственный недостаток построенного запроса — это непонятные имена столбцов. Давайте скорректируем их.
15. Щелчком на кнопке Вид вернитесь в конструктор запроса.
16. В ячейке Поле третьего столбца замените имя Дата на текст Дата первого контакта: Дата. Правая часть этого выражения, расположенная правее двоеточия, по-прежнему задает имя поля, а левая определяет название столбца результата запроса. Таким образом, любому столбцу запроса можно назначить произвольное имя.
17. В ячейке Поле четвертого столбца введите Дата последнего контакта: Дата.
18. В первой строке пятого столбца бланка запроса введите Число контактов: Дата.
Примечание К сожалению, подобный прием не подходит для смены названия поля, значение которого не вычисляется, а передается из таблицы. То есть таким способом не удастся переименовать поле Имя.
19. Снова щелкните на кнопке Вид.
20. Закройте запрос.
21. Для сохранения изменений структуры щелкните на кнопке Да.
22. В окне диалога Сохранение введите имя Итоговый запрос и щелкните на кнопке ОК.
Создание выполняющихся итоговых запросов в Microsoft Access
Дополнительно: требуются экспертные навыки программирования, взаимодействия и многопользовательских навыков.
Эта статья применима к файлам баз данных Microsoft Access (.mdb) или (.accdb).
Сводка
В этой статье демонстрируются два метода, которые можно использовать для создания выполняющегося запроса итогов. Выполняемый запрос итогов — это запрос, в котором итог для каждой записи представляет собой суммирование этой записи и всех предыдущих записей. Этот тип запроса полезен для отображения совокупных итогов по группе записей (или за период времени) в графе или отчете.
Примечание Демонстрацию метода, используемого в этой статье, можно увидеть в примере файла Qrysmp00.exe.
Дополнительная информация
Способ 1
Первый метод использует функцию DSum и критерии в запросе для создания выполняемой суммы с течением времени. Функция DSum суммирует текущую запись и все предыдущие записи. Когда запрос переходит к следующей записи, функция DSum снова запускается и обновляет совокупный итог.
В следующем примере запроса используется таблица Orders из примера базы данных Northwind для создания текущей суммы затрат на доставку за каждый месяц в 1997 году. Выборка данных ограничена одним годом по соображениям производительности. Так как функция DSum выполняется один раз для каждой записи в запросе, для завершения обработки запроса может потребоваться несколько секунд (в зависимости от скорости компьютера). Чтобы создать и выполнить этот запрос, выполните следующие действия.
- Откройте пример базы данных Northwind.
- Создайте новый запрос на выборку и добавьте таблицу Orders .
- В меню Вид выберите пункт Итоги. Примечание В Access 2007 щелкните Итоги в группе Показать и скрыть на вкладке Конструктор .
- В первом столбце сетки конструктора запроса введите следующее выражение в поле Поле и выберите следующие значения в полях Итого, Сортировка и Показать:
Field: AYear: DatePart("yyyy",[OrderDate]) Total: Group By Sort: Ascending Show: Yes
Field: AMonth: DatePart("m",[OrderDate]) Total: Group By Sort: Ascending Show: Yes
Field: RunTot: DSum("Freight","Orders","DatePart('m', _ [OrderDate])
Field: FDate: Format([OrderDate],"mmm") Total: Group By Sort: Ascending Show: Yes
Field: DatePart("yyyy",[OrderDate]) Total: Where Criteria: 1997 Show: No
AYear AMonth RunTot FDate -------------------------------------- 1997 1 2238.98 Jan 1997 2 3840.43 Feb 1997 3 5729.24 Mar 1997 4 8668.34 Apr 1997 5 12129.74 May 1997 6 13982.39 Jun 1997 7 17729.29 Jul 1997 8 22204.73 Aug 1997 9 26565.26 Sep 1997 10 32031.38 Oct 1997 11 36192.09 Nov 1997 12 42748.64 Dec
Способ 2
Второй метод использует запрос итогов с функцией DSum() для создания выполняющихся итогов над группой.
В следующем примере запроса таблица Orders используется для суммирования затрат на фрахт на одного сотрудника, а также для вычисления суммы затратовки. Чтобы создать и выполнить запрос, выполните следующие действия.
- Откройте пример Northwind.mdb базы данных.
- Создайте новый запрос на выборку и добавьте таблицу Orders.
- В меню Вид щелкните Итоги. Примечание В Access 2007 щелкните Итоги в группе Показать и скрыть на вкладке Конструктор .
- В первом столбце сетки конструктора запроса добавьте следующее поле в поле Поле и выберите следующие значения для полей Итого и Показать:
Field: EmpAlias: EmployeeID Total: Group By Show: Yes
Field: Freight Total: Sum Show: Yes
Field: RunTot: Format(DSum("Freight","Orders","[EmployeeID]
Employee SumOfFreight RunTot ------------------------------------------------- Davolio, Nancy $8,836.64 $8,836.64 Fuller, Andrew $8,696.41 $17,533.05 Leverling,Janet $10,884.74 $28,417.79 Peacock, Margaret $11,346.14 $39,763.93 Buchanan, Steven $3,918.71 $43,682.64 Suyama, Michael $3,780.47 $47,463.11 King, Robert $6,665.44 $54,128.55 Callahan, Laura $7,487.88 $61,616.43 Dodsworth, Anne $3,326.26 $64,942.69
Обратная связь
Были ли сведения на этой странице полезными?
Создание запроса на основе нескольких таблиц
В простейшем случае построение и использование запроса в Access заключается в выборе требуемых полей из таблицы, применении условий (если они нужны) и просмотре результатов запроса. Но чаще необходимо использовать данные, которые находятся в разных таблицах. К счастью, вы можете создавать запросы, объединяющие сведения из нескольких источников. В этой статье объясняется, когда следует получать данные сразу из нескольких таблиц и как это делать.
Выберите нужное действие
- Уточнение данных в запросе с помощью данных из связанной таблицы
- Объединение данных в двух таблицах с помощью их связей с третьей таблицей
- Просмотр всех записей из двух похожих таблиц
Уточнение данных в запросе с помощью данных из связанной таблицы
В некоторых случаях запрос, построенный на основе одной таблицы и предоставляющий необходимые сведения, может стать более информативным и полезным благодаря данным из другой таблицы. Например, предположим, что у вас есть список кодов сотрудников, которые выводятся в результатах запроса. Вы понимаете, что было бы более удобнее, если бы в этом списке были видны и имена сотрудников, но они находятся в другой таблице. Чтобы в результатах запроса отображались имена сотрудников, следует включить в него обе таблицы.
Использование мастера запросов для построения запроса на основе главной и связанной таблицы
- Убедитесь, что для таблиц задано отношение в окно отношений. Инструкции
- На вкладке Работа с базами данных в группе Показать или скрыть выберите пункт Отношения.
- На вкладке Конструктор в группе Связи нажмите кнопку Все связи.
- Выберите таблицы, которые нужно связать.
- Если таблицы отображаются в окне схемы данных, убедитесь, что отношение между ними уже установлено. Отношение отображается в виде линии, соединяющей общие поля двух таблиц. Чтобы узнать, какие поля таблиц связаны отношением, дважды щелкните линию связи.
- Если таблицы не отображаются в окне схемы данных, следует добавить их. На вкладке Конструктор в группе Показать или скрыть нажмите кнопку Имена таблиц. Дважды щелкните каждую из таблиц, которые вы хотите отобразить, а затем нажмите кнопку Закрыть.
- Если между таблицами не установлено отношение, создайте его, перетащив поле из одной таблицы на поле другой. Поля, по которым создается отношение, должны иметь одинаковый тип данных.
Примечание: Создать отношение между полем с типом Тип данных "Счетчик" и полем, имеющим тип данных Числовой тип данных, можно в том случае, если это поле имеет размер "длинное целое". Это часто бывает так при создании отношение "один-ко-многим".
Пример на основе базы данных "Борей"
В приведенном ниже примере используется мастер запросов, с помощью которого строится запрос, отображающий список заказов, стоимость доставки каждого заказа и фамилию сотрудника, выполнившего заказ.
Примечание: Этот пример подразумевает изменение учебной базы данных "Борей". Рекомендуем сделать ее резервную копию и выполнять инструкции, используя резервную копию.
Построение запроса с помощью мастера запросов
- Откройте учебную базу данных "Борей". Закройте форму входа.
- На вкладке Создание в группе Запросы нажмите кнопку Мастер запросов.
- В диалоговом окне Новый запрос выберите пункт Простой запрос и нажмите кнопку ОК.
- В поле со списком Таблицы и запросы выберите пункт Таблица: Заказы.
- В списке Доступные поля дважды щелкните пункт ИД_заказа, чтобы переместить это поле в список Выбранные поля. Дважды щелкните пункт Цена доставки, чтобы переместить это поле в список Выбранные поля.
- В поле со списком Таблицы и запросы выберите пункт Таблица: Сотрудники.
- В списке Доступные поля дважды щелкните пункт Имя, чтобы переместить это поле в список Выбранные поля. Дважды щелкните пункт Фамилия, чтобы переместить это поле в список Выбранные поля. Нажмите кнопку Далее.
- Так как вы создаете список всех заказов, следует использовать подробный запрос. Если нужно суммировать стоимость доставки заказов, выполненных сотрудником, или применить другую агрегатную функцию, следует использовать итоговый запрос. Выберите вариант Подробный (вывод каждого поля каждой записи) и нажмите кнопку Далее.
- Нажмите кнопку Готово для просмотра результатов.
Запрос вернет перечень заказов, для каждого из которых будет указана стоимость доставки, а также имя и фамилия сотрудника, выполнившего его.
Объединение данных в двух таблицах с помощью их связей с третьей таблицей
Часто данные в двух таблицах связаны друг с другом через третью таблицу. Это может быть в том случае, когда данные в первых двух таблицах связаны отношение "многие-ко-многим". Хорошим приемом при проектировании баз данных является разбиение одной связи с отношением "многие-ко-многим" между двумя таблицами на две связи с отношением "один-ко-многим", в которых участвуют три таблицы. Это делается путем создания третьей (связующей) таблицы, в которой есть первичный ключ и внешний ключ для каждой из таблиц. Затем создается связь "один-ко-многим" между каждым внешним ключом связующей таблицы и соответствующим первичным ключом связуемой таблицы. В таких случаях следует включать в запрос все три таблицы, даже если вы хотите получить данные только из двух.
Создание запроса на выборку с использованием таблиц, связанных отношением "многие-ко-многим"
- На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
- Дважды щелкните две таблицы, содержащие данные, которые нужно включить в запрос, а также таблицу соединения, которая их связывает, и нажмите кнопку Закрыть. Все три таблицы появятся в рабочей области конструктора запросов, связанные по соответствующим полям.
- Дважды щелкните поля, которые вы хотите использовать в запросе. Каждое поле появится в бланк запроса.
- В бланке запроса укажите условия для полей в строке Условия отбора. Чтобы поле, по которому задаются условия, не отображалось в результатах запроса, снимите флажок в строке Показать для него.
- Чтобы отсортировать результаты по значениям поля, в бланке запроса в строке Сортировка для него выберите значение По возрастанию или По убыванию (в зависимости от того, в каком направлении вы хотите выполнить сортировку записей).
- На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить. Access выведет результаты запроса в Режим таблицы.
Пример на основе базы данных "Борей"
Примечание: Этот пример подразумевает изменение учебной базы данных "Борей". Рекомендуем сделать ее резервную копию и выполнять инструкции, используя резервную копию.
Предположим, что у вас появилась новая возможность: поставщик из Рио-де-Жанейро нашел ваш веб-сайт и хочет с вами сотрудничать. Однако он работает только в Рио-де-Жанейро и Сан-Паулу. Компания поставляет все интересующие вас категории пищевых продуктов. Являясь довольно крупным предприятием, поставщик хочет, чтобы вы гарантировали достаточно большой рынок сбыта, который обеспечил бы ему годовые продажи объемом не менее 20 000 бразильских реалов (около 9 300 долларов США). Можете ли вы обеспечить требуемый рынок сбыта?
Данные, необходимые для ответа на этот вопрос, находятся в двух местах: в таблице "Клиенты" и в таблице "Сведения о заказе". Эти таблицы связаны друг с другом через таблицу "Заказы". Отношения между этими таблицами уже заданы. В таблице "Заказы" для каждого заказа может быть указан только один клиент, связанный с таблицей "Клиенты" по полю "ИДКлиента". Каждая запись в таблице "Сведения о заказе" связана только с одним заказом в таблице "Заказы" по полю "ИД_заказа". Таким образом, у каждого клиента может быть множество заказов, для каждого из которых есть несколько записей со сведениями.
В данном примере следует построить перекрестный запрос, в котором будут отображены годовые продажи в городах Рио-де-Жанейро и Сан-Паулу.
Открытие запроса в Конструкторе
- Откройте базу данных "Борей". Закройте форму входа.
- На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
- Дважды щелкните Клиенты, Заказы, а затем— Сведения о заказе. Все три таблицы появятся в рабочей области конструктора запросов.
- В таблице "Клиенты" дважды щелкните поле "Город", чтобы добавить его в бланк запроса.
- В бланке запроса в строке Условие отбора столбца Город введите In ("Рио-де-Жанейро","Сан Паулу). Это позволяет включить в запрос только записи о заказах клиентов из этих городов.
- В таблице "Сведения о заказе" дважды щелкните поля "ДатаИсполнения" и "Цена". Поля добавляются в бланк запроса.
- В столбце бланка запроса ДатаИсполнения выберите строку Поле. Замените [ДатаИсполнения] на Год: Format([ДатаИсполнения],"yyyy"). При этом будет создан псевдоним поля (Год), позволяющий использовать только значение года из даты, указанной в поле "ДатаИсполнения".
- В столбце бланка запроса Цена выберите строку Поле. Замените [Цена] на Продажи: [Сведения о заказе].[Цена]*[Количество]-[Сведения о заказе].[Цена]*[Количество]*[Скидка]. При этом будет создан псевдоним поля (Продажи), вычисляющий сумму продаж для каждой записи.
- На вкладке Конструктор в группе Тип запроса щелкните элемент Перекрестная таблица. В бланке запроса появятся две новые строки: Итоги и Перекрестная таблица.
- В столбце бланка запроса Город щелкните строку Перекрестная таблица, а затем щелкните Заголовки строк. Названия городов будут использоваться в качестве заголовков строк (т. е. запрос будет возвращать одну строку для каждого города).
- В столбце Год щелкните строку Перекрестная таблица, а затем щелкните Заголовки столбцов. Значения годов будут использоваться в качестве заголовков столбцов (т. е. запрос будет возвращать один столбец для каждого года).
- В столбце Продажи щелкните строку Перекрестная таблица, а затем щелкните элемент Значение. Значения продаж будут отображаться на пересечениях строк и столбцов (т. е. запрос будет возвращать одно значение продаж для каждого сочетания города и года).
- В столбце Продажи щелкните строку Итоги, а затем щелкните элемент Sum. Запрос будет суммировать все значения столбца. В строке Итоги для других двух столбцов можно оставить значение по умолчанию Группировка, так как в этих столбцах требуется отобразить отдельные значения, а не агрегированные показатели.
- На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить.
Теперь у вас есть запрос, возвращающий общие годовые продажи по Рио-де-Жанейро и Сан-Паулу.
Просмотр всех записей из двух похожих таблиц
Иногда требуется объединить данные из двух таблиц, которые имеют одинаковую структуру, но расположены в разных базах данных. Рассмотрим следующий сценарий.
Предположим, вы являетесь аналитиком и занимаетесь обработкой сведений об учащихся. Вы начинаете работу над новым проектом совместной обработки данных по вашей и другой школе с целью улучшения их учебных планов. По некоторым из исследуемых вопросов удобнее просматривать записи по обеим школам вместе, словно бы они находились в одной таблице.
Вы можете импортировать данные другой школы в новые таблицы в своей базе данных, но в этом случае изменения, внесенные в базу данных другой школы, не будут отражаться в вашей базе данных. Лучшим решением было бы установить связь с таблицами другой школы, а затем создать запросы, объединяющие эти данные во время выполнения. При этом вы сможете анализировать данные в едином наборе вместо того, чтобы выполнять два отдельных анализа, а затем пытаться объединить их в один.
Чтобы просмотреть все записи из двух таблиц с одинаковой структурой, используйте запрос на объединение.
Запросы на объединение невозможно отобразить в Конструкторе. Они создаются с помощью команд SQL, которые нужно вводить на вкладке объекта в режим SQL.
Создание запроса на объединение двух таблиц
- На вкладке Создание в группе Запросы нажмите кнопку Конструктор запросов.
- На вкладке Конструктор в группе Тип запроса нажмите кнопку Объединение. Запрос переключится из Конструктора в режим SQL. На данном этапе вкладка объекта в режиме SQL будет пуста.
- В режиме SQL введите SELECT и список полей первой таблицы, которые вы хотите включить в запрос. Имена полей должны быть заключены в квадратные скобки и разделены запятыми. Когда вы закончите вводить имена полей, нажмите клавишу ВВОД. Курсор переместится на одну строку вниз в окне режима SQL.
- Введите FROM и имя первой таблицы, включаемой в запрос. Нажмите клавишу ВВОД.
- Если вы хотите указать условие для поля первой таблицы, введите WHERE, имя поля, оператор сравнения (обычно знак равенства =) и условие. Можно добавлять дополнительные условия к концу предложения WHERE, используя ключевое слово AND и такой же синтаксис, как и для первого условия (например, WHERE [Уровень]="100" AND [Часов]>2). После завершения ввода условий нажмите клавишу ВВОД.
- Введите слово UNION и нажмите клавишу ВВОД.
- Введите SELECT и список полей второй таблицы, которые вы хотите включить в запрос. Следует указать те же поля, что для первой таблицы, и в том же порядке. Имена полей должны быть заключены в квадратные скобки и разделены запятыми. Когда вы закончите вводить имена полей, нажмите клавишу ВВОД.
- Введите FROM и имя второй таблицы, включаемой в запрос. Нажмите клавишу ВВОД.
- Если вы хотите, добавьте предложение WHERE, как описано в шаге 6.
- Введите точку с запятой (;), чтобы обозначить конец запроса.
- На вкладке Конструктор в группе Результаты нажмите кнопку Выполнить. Результаты будут отображены в режиме таблицы.