Предложение ИМЕЮЩИЕ / HAVING

Добавил admin | Предложение ИМЕЮЩИЕ / HAVING | Понедельник 5 октября 2009 13:26

Предложение ИМЕЮЩИЕ позволяет накладывать условия на значения агрегатных функций. В других конструкциях языка запросов, например, в предложении ГДЕ, использовать агрегатные функции в условиях нельзя. В условии отбора ИМЕЮЩИЕ можно использовать только агрегатные функции и поля, по которым осуществляется группировка.

Например, необходимо выбрать товары, которых продали не менее 70 штук. Тогда нужно сначала подсчитать объем продаж по каждому товару, а затем применить условие отбора уже к получившимся группам, а не к исходным записям. Эта задача решается с помощью приведенного ниже запроса:

ВЫБРАТЬ Номенклатура, Сумма (Количество) КАК Продано
ИЗ Документ.РасходнаяНакладная.Состав
СГРУППИРОВАТЬ ПО Номенклатура
ИМЕЮЩИЕ Сумма (Количество) >= 70

Результат запроса будет следующий: Приведем другой пример, когда отбор групп необходим. Выберем клиентов, купивших за заданный период товаров на сумму 10000 и выше:

ВЫБРАТЬ Контрагент, СУММА(Сумма) КАК Куплено
ИЗ РегистрНакопления.Продажи
ГДЕ Период МЕЖДУ &НачДата И ЬКонДата
СГРУППИРОВАТЬ ПО Контрагент
ИМЕЮЩИЕ СУММА(Сумма) >= 10000

Обратите внимание, что ключевое слово ГДЕ применяется здесь только для отбора записей за нужный период. Затем данные группируются по контрагенту с подсчетом суммы проданных товаров, и к получившимся строкам применяется условие ИМЕЮЩИЕ.