Использование подчиненных запросов в определении полей основного запроса

Допустим, необходимо подсчитать количество клиентов, купивших какой-либо товар той или иной категории. Для этого создайте новый запрос, откройте его в режиме конструктора и добавьте таблицу Товары. В бланк запроса перетащите поле Марка. В определении следующих двух полей введите строки:

Категория: (SELECT [Категория] FROM [Типы] WHERE [Товары].[КодТипа]=[Типы].[КодТипа])

и

Количество клиентов: (SELECT Count([Заказы].[КодКлиента]) AS [Клиент] FROM Заказы INNER JOIN Заказано ON [Заказы].[КодЗаказа]=[Заказано].[КодЗаказа] WHERE ((([Заказано].[КодТовара])=[Товары].[Код Товара])))

Получившийся запрос изображен на рис. 9.2.

Рис. 9.2. Запрос, использующий подчиненные запросы в определении полей.

Пояснения

а). Первый подчиненный запрос выбирает для каждой марки товаров соответствующую ей категорию из таблицы Типы, а второй — подсчитывает количество клиентов в таблице Заказы, для заказов которых поле КодТовара в таблице Заказано совпадает с текущим кодом товара в таблице Товары. Для обоих подчиненных запросов проще сначала сделать соответствующие вспомогательные запросы, а затем скопировать их SQL-операторы в определения полей основного запроса.

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

в). Оба подчиненных запроса должны возвращать ровно по одному значению для каждого значения поля Марка, иначе основной запрос работать не будет.

г). Отсортировать по убыванию или по возрастанию поля, определения которых содержат подчиненные запросы нельзя. Если все же это сделать необходимо, то придется сделать еще один запрос на основе запроса с такими нолями и уже в нем задать необходимую сортировку.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: