Профессия — 1С

Рукопашный бой Карташ

Категории

Вложенные запросы

рубрики: Запросы | Дата: 23 Январь, 2017

Рассмотрим, что такое вложенные запросы в языке запросов 1С и для чего они нужны.
Часто встречается ситуация, когда над таблицей необходимо проделать несколько последовательных действий. Достаточно показательным является пример, когда сначала надо сгруппировать данные, а потом уже на сгруппированную таблицу наложить некоторое условие, либо соединить с другой таблицей. В таких случаях на помощь и приходят вложенные запросы.




Вложенный запрос практически ничем не отличается от обычного запроса. Он заключается в скобки и в нем доступны почти все методы и функции языка запросов 1С. А для вышестоящего запроса доступны все поля вложенного запроса.
Структура самого примитивного вложенного запроса выглядит следующим образом


ВЫБРАТЬ
	<Список полей из вложенного запроса>
ИЗ
    (ВЫБРАТЬ
		<Список полей>
	ИЗ
		<ИмяТаблицы>) КАК ВложенныйЗапрос

Конечно же в таком виде использование вложенного запроса не имеет смысла, т.к. можно сразу выбрать необходимые поля без использования вложенности. Здесь все предельно упрощено для простоты понимания.

А теперь рассмотрим все вышесказанное на примере.
Пусть у нас есть таблица СотрудникиПодразделений:

Подразделение Сотрудник
Бухгалтерия Иванов
Администрация Петров
Бухгалтерия Сидоров

И мы хотим выбрать из этой таблицы все подразделения, где работает более одного сотрудника.




Первым шагом нам необходимо подсчитать количество сотрудников в каждом подразделении. Для этого сгруппируем исходную таблицу с использованием агрегатной функции КОЛИЧЕСТВО.


ВЫБРАТЬ
	СотрудникиПодразделений.Подразделение КАК Подразделение,
	КОЛИЧЕСТВО(СотрудникиПодразделений.Сотрудник) КАК КоличествоСотрудников
ИЗ
	СотрудникиПодразделений КАК СотрудникиПодразделений
СГРУППИРОВАТЬ ПО
	СотрудникиПодразделений.Подразделение

Если выполнить этот запрос, то в результате получим следующую таблицу

Подразделение КоличествоСотрудников
Бухгалтерия 2
Администрация 1

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


ВЫБРАТЬ
	ВложенныйЗапрос.Подразделение КАК Подразделение
ИЗ
	(ВЫБРАТЬ
		СотрудникиПодразделений.Подразделение КАК Подразделение,
		КОЛИЧЕСТВО(СотрудникиПодразделений.Сотрудник) КАК КоличествоСотрудников
	ИЗ
		СотрудникиПодразделений КАК СотрудникиПодразделений

	СГРУППИРОВАТЬ ПО
		СотрудникиПодразделений.Подразделение) КАК ВложенныйЗапрос
ГДЕ
	ВложенныйЗапрос.КоличествоСотрудников > 1

Таким образом результат итогового запроса будет следующим

Подразделение
Бухгалтерия

Справедливости ради стоит отметить, что тот же результат можно достигнуть с помощью функции ИМЕЮЩИЕ языка запросов 1С, а также с использованием временных таблиц.
На практике вы конечно же столкнетесь с более сложными вложенными запросами в которых может использоваться как соединение, так и объединение таблиц. А также может быть несколько уровней вложенности.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

   

2018г. Профессия — 1С. Обмен опытом по программированию в 1С