ИМЕЮЩИЕ (having) в запросе 1с #492515


#0 by Индийска праграмиста
Объясните плз кратко и точно, что значит этот оператор. Я интуитивно что то понимаю, но до конца понять не могу. Оператор ГДЕ ставит условия на исходные поля запроса, т.е. до их группировки и расчета агрегатных функций. А оператор ИМЕЮЩИЕ ставит условия уже на сгруппированный запрос и уже на результат агрегатных функций над полями. Правильно я понимаю?
#1 by rotting
Правильно.
#2 by Индийска праграмиста
супер..тогда следующая конструкция в запросе    |    ИМЕЮЩИЕ это аналогично использованию ВЫБРАТЬ ПЕРВЫЕ 1 ?
#3 by acsent
Удобно представлять ИМЕЮЩИЕ след. образом. Сгруппированный запрос оборачиваем в выборку и к нему применяем ГДЕ
#4 by 73
нет
#5 by Индийска праграмиста
спасибо..на самом деле удобно тогда как?..если в запросе одна запись, то она выведется, а если не одна запись, то результат запроса будет пустой?
#6 by Defender aka LINN
аналогично (с точки зрения результата запроса)
#7 by 73
"Первые 1" есть и у нескольких записей... Так что, "Первые 1" не равносильно " Имеющие Количество(*)=1".
#8 by Fragster
ага, только итоги и имеющие кажись можно юзать, а во воложенном запрсе - фиг
#9 by Alpinist22
Уроки от Чистова посмотри, там про ИМЕЮЩИЕ он подробно рассказывает и показывает.
#10 by Alpinist22
Пример использования вместе с группировками:
#11 by Alpinist22
Если использовать ГДЕ то будет ошибка!
#12 by Andry888
ты просто не умеешь "ГДЕ" готовить.)
#13 by Alpinist22
а че его там готовить, вложенный запрос и вот он ГДЕ на выходе =)
#14 by Alpinist22
я уже знатный Кулинар стал, буду вас учить готовить )))
#15 by Andry888
ВЫБРАТЬ
#16 by Русмус
нет. вернет пустую таблицу, если после группировки осталось больше одной записи и собственно таблицу с этой одной записью в противном случае
#17 by Ненавижу 1С
да вы гоните
#18 by Alpinist22
еще бы не работать ему, ты все правильно сделал ;)
#19 by Defender aka LINN
Не будет ошибки. Потому что я хочу получить сумму всех строк, где сумма больше 1000. А вот то, что результат может отличаться от желания пейсателя запроса - да, может.
#20 by Alpinist22
замени ИМЕЮЩИЕ на ГДЕ и попробуй выполнить )))
#21 by Defender aka LINN
Ты ж понимаешь, что я условие в другое место вставлю и функцию уберу при этом?
#22 by НетуаНадо
ГДЕ - условие над каждой записью группировки ИМЕЮЩИЕ - условие над результатом группировки
#23 by Alpinist22
ну ты ведь тоже должен понимать что я написал про ошибку при замене ИМЕЮЩИЕ на ГДЕ... краткость сестра таланта
#24 by Русмус
неужели? давайте по порядку: таблица сворачивается по группировкам, и к ней применяется условие Количество(*) - это количество всех записей таблицы. Соответственно, результат будет, только если записей ровно одна
#25 by Defender aka LINN
"Количество(*) - это количество всех записей таблицы" - садись, два.
#26 by Fram
+ я бы даже сказал КОЛ
#27 by Ненавижу 1С
+ садись на кол
#28 by Русмус
каюсь, ошибся. Запрос    "а"    "в"
#29 by Индийска праграмиста
тема собственно по поводу этого запроса создана...зачем так сделано?
#30 by Индийска праграмиста
типовой код в упп...везде где выбирается подразделениеорганизации из этого регистра, такой запрос
Тэги:
Ответить:
Комментарии доступны только авторизированным пользователям

В этой группе 1С