Аксесс перекрестный запрос
Перекрестные запросы
Перекрестные запросы — это запросы, в которых происходит статистическая обработка данных, результаты которой выводятся в виде таблицы, очень похожей на сводную таблицу Excel. Перекрестные запросы обладают следующими достоинствами:
- возможностью обработки значительного объема данных и вывода их в формате, который очень хорошо подходит для автоматического создания графиков и диаграмм;
- простотой и скоростью разработки сложных запросов с несколькими уровнями детализации.
Однако они имеют и недостатки — например, нельзя сортировать таблицу результатов по значениям, содержащимся в столбцах, т. к. в подавляющем большинстве случаев одновременное упорядочивание данных в столбцах по всем строкам невозможно. При этом вы можете задать сортировку по возрастанию или по убыванию для заголовков строк.
Перекрестные запросы удобны для представления данных в виде таблицы, но т. к такая таблица часто имеет разное количество столбцов, на них довольно сложно строить отчеты. Создание отчета на базе перекрестного запроса будет рассматриваться в гл. 13.
В качестве примера сформируем два перекрестных запроса к базе данных «Борей» для вывода ежемесячных продаж товара (по его коду) и ежеквартальных продаж товара (по его типу). Подобные таблицы, содержащие итоги, которые подводятся через определенные промежутки времени, например через каждый месяц или квартал, обычно используются в качестве данных для графиков.
В описываемой ниже пошаговой процедуре создания перекрестного запроса показано, как можно пользоваться выражениями для создания новых вычисляемых полей в запросах.
Итак, мы будем создавать перекрестный запрос, в котором в строках выводятся товары, а в столбцах — соответствующие им ежемесячные объемы продаж. Для этого:
- Создайте новый запрос в режиме Конструктора и добавьте в него таблицы «Товары» (Products), «Заказы» (Orders) и «Заказано» (Order Details).
- Перетащите поля «КодТовара» (ProductlD) и «Марка» (ProductName) таблицы «Товары», а затем поле «ДатаРазмещения» (OrderedDate) таблицы «Заказы» в первые три столбца бланка запроса.
- Выберите команду меню Запрос, Перекрестный (Query, Crosstab Query). Заголовок окна запроса Запрос1:на выборку (Query1:Select Query) изменится на Запрос!перекрестный запрос (Queryl:Crosstab Query). Кроме того, в бланк запроса будут добавлены строки Перекрестная таблица (Crosstab) и Групповая операция (Total), в которую во всех столбцах автоматически вводится операция Группировка (Group By).
- Выберите в списке ячейки Перекрестная таблица столбца «КодТовара» значение Заголовки строк (Row Heading). Выполните то же самое для столбца «Марка». Эти столбцы являются требуемыми заголовками строк перекрестной таблицы.
- Выберите в списке ячейки Групповая операция столбца «ДатаРазмещения» значение Условие (Where). В ячейке Условие отбора (Criteria) этого столбца введите выражение =#01.01.97# для вывода в перекрестной таблице данных за 1997 год.
- Установите курсор в ячейку Поле (Field) следующего (пустого) столбца и введите выражение:
Объем продаж: Sum([Количество]*[Заказано].[Цена])
Это будет поле, значение которого вычисляется с помощью описанного выражения, а название поля — «Объем продаж». В выражении используются поля из таблиц, которые включены в запрос, однако обратите внимание, что сами поля в результат запроса не включены. Это означает, что при создании вычисляемого поля в выражение можно включать ссылки не только на поля самого запроса, но и на поля, которые не включаются в результат запроса. Важно, чтобы они были в исходных таблицах. При ссылке на поле «Цена» в выражении мы указали еще имя таблицы «Заказано», а при ссылке на поле «Количество» не указывали. Указать имя таблицы пришлось потому, что поле с именем «Цена» присутствует и в таблице «Товары» и в таблице «Заказано». Если не указать в выражении имени таблицы, Access не сможет определить, из какой таблицы брать значения, поэтому при выполнении запроса выдаст сообщение об ошибке, как это представлено на рис. 8.13.
Рис. 8.13. Сообщение об ошибке в выражении вычисляемого поля
Выберите в ячейке Групповая операция (Total) того же столбца значение Выражение (Expression), а затем в ячейке Перекрестная таблица — значение Значение (Value). В столбце «Объем продаж» вычисляется общий объем заказов на каждый товар, который будет подставляться в ячейки результирующей таблицы запроса.
- Установите курсор в ячейку Поле (Field) следующего (пустого) столбца и введите выражение Format([ДатаРазмещения];»mmm»). Функция Format О в данном случае будет возвращать три первые буквы месяца от значения даты в столбце «ДатаРазмещения». С помощью этой функции мы создали еще одно вычисляемое поле в запросе, причем после окончания ввода этого выражения Access автоматически создает имя этого поля «Выражение!» (Exprl). Так происходит всякий раз, когда мы не определяем имя вычисляемого поля. Выберите из списка в ячейке Перекрестная таблица этого столбца значение Заголовки столбцов (Column Heading) (рис. 8.14). Это означает, что данный столбец запроса будет преобразован в процессе выполнения запроса в строку, содержащую заголовки столбцов результирующей таблицы.
Рис. 8.14. Перекрестный запрос в режиме Конструктора
- Нажмите кнопку Запуск (Run). Появится результирующее множество записей, представленное на рис. 8.15.
Рис. 8.15. Результирующее множество перекрестного запроса
Стоит обратить внимание, что выведенная перекрестная таблица обладает одним недостатком: расположение столбцов определяется алфавитным порядком их заголовков, а не хронологической очередностью. Избежать этой неприятности можно. Для этого необходимо задать порядок сортировки заголовков столбцов. В следующем разделе мы покажем, как это можно сделать.
Аксесс перекрестный запрос
На этом шаге будут рассмотрены перекрестные запросы.
В Access имеется возможность создания запросов, в которых используются групповые операции, в виде электронных таблиц, т.е. в качестве названий строк и столбцов такой «таблицы» используются те или иные поля таблиц, а в ее «ячейках» будут отображаться вычисляемые значения, которые соответствуют значениям, указанным в названии строки и столбца. Например, в качестве примера подобной электронной таблицы можно рассмотреть набор оценок, которые получил каждый студент по всем предметам. Другими словами, заголовками строк такой таблицы будут фамилии студентов, заголовками столбцов — названия предметов, а на пересечении строк и столбцов будет отображаться оценка того или иного студента по данному предмету, аналогично расположению данных в рабочих листах Excel.
Примечание. Вычисляемые значения не могут быть отредактированы, поэтому перекрестный запрос нет смысла использовать с целью изменения данных. Однако перекрестные запросы могут оказаться весьма полезными при создании отчетов.
Для создания перекрестного запроса, отображающего таблицу оценок студентов по предметам, следует, вначале создать новый запрос в режиме конструктора. Затем нужно в макет запроса добавить таблицы, в которых содержатся исходные данные запроса: Студенты, Успеваемость и Предметы.
После этого необходимо выполнить команду Запрос | Перекрестный, в результате чего в макете запроса среди параметров появится строка Перекрестная таблица, в которой для полей запроса можно с помощью разворачивающегося списка выбрать одно из следующих значений.
- Заголовки строк — выбирается для поля запроса, значения которого нужно использовать в качестве заголовков строк. В качестве заголовков строк необходимо определить хотя бы одно поле, при этом в строке Групповые операции необходимо выбрать значение Группировка, одну из итоговых функций или Выражение.
- Заголовки столбцов — выбирается для поля запроса, значения которого нужно использовать в качестве заголовков столбцов. С этой целью используется только одно поле, требования к которому аналогичны требованиям к полю, в котором установлено значение Заголовки Строк.
- Значение — выбирается для поля запроса, в котором вычисляется итоговое значение, отображаемое в «ячейках» перекрестного запроса. Такое поле должно быть единственным, при этом в строке Групповые операции для него необходимо выбрать одну из итоговых функций или задать выражение, в котором используются итоговые функции.
- (не отображается) — выбирается для того поля, значения которого не должны отображаться в перекрестном запросе.
В первом столбце запроса нужно выбрать поле Фамилия таблицы Студенты, при этом следует задать для него значение Группировка в поле Групповая операция, а также Заголовки строк в поле Перекрестная таблица. Также можно выбрать направление сортировки по возрастанию.
Для второго столбца запроса необходимо выбрать поле Название таблицы Предметы и установить для него значение Группировка в поле Групповая операция и Заголовки столбцов в поле Перекрестная таблица.
В третьем столбце запроса нужно выбрать поле Оценка таблицы Успеваемость и задать для него функцию Sum в поле Групповая операция, а также Значение в поле Перекрестная таблица.
Созданный запрос можно сохранить под именем ОценкиПоПредметам (рис. 1).
Рис. 1. Макет перекрестного запроса ОценкиПоПредметам
В результате выполнения перекрестного запроса ОценкиПоПредметам будет получена электронная таблица, содержащая оценки студентов по всем предметам (рис. 2). Данный запрос может быть использован, например, в отчете, который должен отображать итоги прошедшей сессии.
Рис. 2. Результат выполнения запроса ОценкиПоПредметам
Создание перекрестного запроса можно увидеть здесь, а взять клип здесь.
На следующем шаге вы узнаете о запросах на изменение.
Предыдущий шаг Содержание
Следующий шаг
Работе в программе в Microsoft Access
Перекрестный запрос — это запрос, в котором происходит статистическая обработка данных, результаты которой выводятся в виде таблицы, очень похожей на сводную таблицу Excel.
Перекрестный запрос подсчитывает сумму, среднее, число значений или выполняет другие статистические расчеты, после чего результаты группируются в виде таблицы по двум наборам данных, один из которых определяет заголовки столбцов, а другой заголовки строк.
- В появившемся окне Crosstab Query Wizard(Создание перекрестного запроса) нужно выбрать таблицу (Töötaja), которая будет служить источником данных для создаваемого запроса.
- Нажать кнопку Next(Далее).
- В следующем окне нужно выбрать значения какого поля будут использоваться в заголовках строк. Мы выбираем поле Ameti_kood (код должности) и с помощью стрелки переносим в список Selected Fields.
- Нажать кнопку Next (Далее).
- Затем укажите поля, которые станут заголовками столбцов. В данном случае выбираем поле Sugu
- Нажать кнопку Next(Далее).
- В следующем окне Мастера предстоит ответить еще на один вопрос: What number do you want calculated for each column and row intersection? (Что вы хотите вычислить для каждой ячейки, расположенной на пересечении строки и столбца?)
- В нашем случае, мы выбираем поле Staaz (Cтаж) и будем высчитывать средний (Avg) стаж для каждого работника каждой специальности. Т.е .Avg(Staaz)
- Нажать кнопку Next(Далее).
- Следующее диалоговое окно будет последним. В нем нужно ввести имя создаваемого запроса в поле What do you want to name your query? (Задайте имя запроса) и выбрать дальнейшие действия:
View the query(Открыть запрос для просмотра данных) или
Modify the design(Изменить макет запроса).
- Нажать кнопку Finish (Готово).
- Для просмотра откроется запрос, в котором можно увидеть средний стаж работы по каждой специальности, в том числе отдельно для мужчин и женщин.
Перекрестный запрос — понятие, использование и создание
При работе с базами данных пользователю необходимо получать информацию в удобном для отображения виде с подведением итогов по различным параметрам, с использованием вычислений и выражений. В БД Access для этого используются запросы на выборку данных и отчеты. В статье рассматривается еще один способ отображения и отбора необходимых значений – перекрестный запрос.
Понятие и использование
В БД, содержащей множество связанных таблиц, пользователь использует запросы на выборку для того, чтобы получить только ту информацию, которая необходима ему в конкретный момент. Такие запросы позволяют отобрать значения из нескольких объектов, сгруппировать и отсортировать их по критериям, выбрать записи по определенным условиям.
Результаты запроса отображаются в виде таблицы. Столбцами являются поля объектов, из них производится выборка. А в строках содержатся значения ячеек этих объектов. Полученные данные пользователь выводит на монитор с помощью отчетов Access, получая наглядное представление о содержащейся в БД информации.
Но зачастую необходимо получить данные не в чистом виде, а с использованием функций и выражений. Один столбец таблицы группируют с другим, чтобы объединить информацию. Все это помогает сделать перекрестный запрос.
Выражения, сортировка, условия запроса
В запросах используются функции для обработки отдельных значений и результатов. В БД Access предусмотрен выбор встроенных функций для работы с различными типами данных. Доступны вычисление дня, месяца или года для даты, нахождение входа подстроки в текстовом поле, тригонометрические и арифметические операции с числами, преобразование типов между собой.
В перекрестных запросах для выведения итогов применяются функции нахождения минимального, максимального или среднего значения, суммы либо количества данных.
Результаты выполнения запросов сортируют по полям по возрастанию либо убыванию. Для отбора значений задаются условия, позволяющие получить в результатах только необходимые данные. В условиях также широко используются выражения.
Использование мастера для создания
Предположим, в небольшом магазинчике по продаже предметов интерьера для дома ведется учет ваз. Они изготовлены из различных материалов и имеют определенные размеры. Заказчик хочет купить товары только из одного материала одного размера в количестве 25 штук. Чтобы выяснить, каких именно ваз достаточно на складе, создается запрос, результаты которого покажут количество предметов, соответствующих критериям покупателя.
Создание перекрестного запроса для этого примера удобно осуществить с помощью «Мастера запросов». Его преимущество в простоте, однако это же и является недостатком. Он не позволяет делать сложные отборы из нескольких таблиц. Но для нашего случая «Мастер запросов» подойдет идеально.
На вкладке «Создание» нажимаем «Мастер запросов» и в открывшемся окне выбираем тип «Перекрестный», а затем таблицу для выборки – «Вазы».
Предположим, в итоговой таблице мы хотим видеть материал, из которого изготовлены вазы, в строках и их размер в столбцах. Выбираем это.
Значения в ячейках представляют собой количество ваз из каждого материала и каждого размера. Они вычисляются как сумма.
Получаем результат. В нем указано, что магазин может предложить заказчику 25 средних ваз из стекла или фарфора.
Создание в «Конструкторе»
Для более сложных случаев создание перекрестного запроса в Access возможно при помощи «Конструктора». Возьмем более сложный пример магазина, торгующего предметами декора. Вазы находятся на разных складах. На этот раз покупателю нужно 45 одинаковых ваз, и он хочет их забрать самостоятельно прямо со склада.
В базе содержатся таблицы «Вазы» с информацией о материале и размере предметов, «Склады» с адресами хранилищ и «Товары по складам» с типом продукции и ее количеством в каждом из хранилищ.
В «Конструкторе запросов» выбираем все эти таблицы. В строках содержатся данные по складам с номерами и адресами, в столбцах – наименования ваз, в ячейках – количество товаров.
Судя по таблице результатов, мы можем предложить покупателю 3 склада, в которых имеется необходимое количество одинаковых ваз, – № 2, 4 и «Центральный». В первых двух присутствует только одно наименование товара в нужном количестве, в последнем – три.
Использование SQL
Создать перекрестный запрос в БД Access также можно на языке программирования SQL. Для этого используется операция TRANSFORM. В теле запроса расположена функция, которую мы применяем для обработки значений в ячейках результирующей таблицы. В нашем случае это сумма чисел в поле «Количество» таблицы «Товары по складам».
Данные можно получить обычным запросом на выборку SELECT. В отбираемых полях указываются те столбцы, которые в итоговом запросе составляют заголовки строк. В нашем примере это поля «Склад» и «Адрес» из таблицы «Склады». Для добавления остальных таблиц используется инструкция INNER JOIN с указанием полей для связки.
И, наконец, команда PIVOT включает то поле, значения которого в результате представляют собой заголовки столбцов – наименования ваз.
Запрос SQL приобретает вид:
TRANSFORM Sum([Товары по складам].Количество) AS [Sum-Количество]
SELECT Склады.Склад, Склады.Адрес
FROM Склады INNER JOIN (Вазы INNER JOIN [Товары по складам] ON Вазы.Код = [Товары по складам].Наименование) ON Склады.Код = [Товары по складам].Склад
GROUP BY Склады.Склад, Склады.Адрес
Как мы убедились, перекрестные запросы в базе Access – удобная функция, использовать которую несложно. Она помогает упростить представление данных и облегчить работу над сводными отчетами.