![]() |
![]() |
![]() |
|
ИМЕЮЩИЕ (having) в запросе 1с | ☑ | ||
---|---|---|---|---|
0
Индийска праграмиста
09.07.10
✎
12:22
|
Объясните плз кратко и точно, что значит этот оператор. Я интуитивно что то понимаю, но до конца понять не могу.
Оператор ГДЕ ставит условия на исходные поля запроса, т.е. до их группировки и расчета агрегатных функций. А оператор ИМЕЮЩИЕ ставит условия уже на сгруппированный запрос и уже на результат агрегатных функций над полями. Правильно я понимаю? |
|||
1
rotting
09.07.10
✎
12:24
|
Правильно.
|
|||
2
Индийска праграмиста
09.07.10
✎
12:26
|
супер..тогда следующая конструкция в запросе
| ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) = 1 это аналогично использованию ВЫБРАТЬ ПЕРВЫЕ 1 ? |
|||
3
acsent
09.07.10
✎
12:28
|
Удобно представлять ИМЕЮЩИЕ след. образом.
Сгруппированный запрос оборачиваем в выборку и к нему применяем ГДЕ |
|||
4
73
09.07.10
✎
12:28
|
(2) нет
|
|||
5
Индийска праграмиста
09.07.10
✎
12:38
|
(3) спасибо..на самом деле удобно
(4) тогда как?..если в запросе одна запись, то она выведется, а если не одна запись, то результат запроса будет пустой? |
|||
6
Defender aka LINN
09.07.10
✎
12:42
|
аналогично (с точки зрения результата запроса)
|
|||
7
73
09.07.10
✎
12:47
|
(5) "Первые 1" есть и у нескольких записей...
Так что, "Первые 1" не равносильно " Имеющие Количество(*)=1". |
|||
8
Fragster
гуру
09.07.10
✎
12:49
|
(6) ага, только итоги и имеющие кажись можно юзать, а во воложенном запрсе - фиг
|
|||
9
Alpinist22
09.07.10
✎
12:54
|
Уроки от Чистова посмотри, там про ИМЕЮЩИЕ он подробно рассказывает и показывает.
|
|||
10
Alpinist22
09.07.10
✎
12:55
|
Пример использования вместе с группировками:
|
|||
11
Alpinist22
09.07.10
✎
12:58
|
ВЫБРАТЬ
Если использовать ГДЕ то будет ошибка! |
|||
12
Andry888
09.07.10
✎
13:00
|
(11) ты просто не умеешь "ГДЕ" готовить.)
|
|||
13
Alpinist22
09.07.10
✎
13:02
|
(12) а че его там готовить, вложенный запрос и вот он ГДЕ на выходе =)
|
|||
14
Alpinist22
09.07.10
✎
13:02
|
(12) я уже знатный Кулинар стал, буду вас учить готовить )))
|
|||
15
Andry888
09.07.10
✎
13:03
|
ВЫБРАТЬ
ПоступлениеТоваровУслуг.Контрагент, СУММА(ПоступлениеТоваровУслуг.СуммаДокумента) КАК СуммаДокумента ИЗ Документ.ПоступлениеТоваровУслуг КАК ПоступлениеТоваровУслуг ГДЕ ПоступлениеТоваровУслуг.Контрагент=&К СГРУППИРОВАТЬ ПО ПоступлениеТоваровУслуг.Контрагент ИМЕЮЩИЕ СУММА(ПоступлениеТоваровУслуг.СуммаДокумента) > 1000 работает ведь.) |
|||
16
Русмус
09.07.10
✎
13:41
|
(2) нет.
| ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) = 1 вернет пустую таблицу, если после группировки осталось больше одной записи и собственно таблицу с этой одной записью в противном случае |
|||
17
Ненавижу 1С
гуру
09.07.10
✎
13:42
|
(16) да вы гоните
|
|||
18
Alpinist22
09.07.10
✎
13:43
|
(15) еще бы не работать ему, ты все правильно сделал ;)
|
|||
19
Defender aka LINN
09.07.10
✎
13:44
|
(11) Не будет ошибки. Потому что я хочу получить сумму всех строк, где сумма больше 1000. А вот то, что результат может отличаться от желания пейсателя запроса - да, может.
|
|||
20
Alpinist22
09.07.10
✎
13:47
|
(19) замени ИМЕЮЩИЕ на ГДЕ и попробуй выполнить )))
|
|||
21
Defender aka LINN
09.07.10
✎
13:50
|
(20) Ты ж понимаешь, что я условие в другое место вставлю и функцию уберу при этом?
|
|||
22
НетуаНадо
09.07.10
✎
13:51
|
ГДЕ - условие над каждой записью группировки
ИМЕЮЩИЕ - условие над результатом группировки |
|||
23
Alpinist22
09.07.10
✎
13:53
|
(21) ну ты ведь тоже должен понимать что я написал про ошибку при замене ИМЕЮЩИЕ на ГДЕ...
(22) краткость сестра таланта |
|||
24
Русмус
09.07.10
✎
13:55
|
(17) неужели? давайте по порядку:
таблица сворачивается по группировкам, и к ней применяется условие Количество(*) - это количество всех записей таблицы. Соответственно, результат будет, только если записей ровно одна |
|||
25
Defender aka LINN
09.07.10
✎
13:56
|
(24) "Количество(*) - это количество всех записей таблицы" - садись, два.
|
|||
26
Fram
09.07.10
✎
14:00
|
+(25) я бы даже сказал КОЛ
|
|||
27
Ненавижу 1С
гуру
09.07.10
✎
14:01
|
+(26) садись на кол
|
|||
28
Русмус
09.07.10
✎
14:16
|
(25) каюсь, ошибся.
Запрос "ВЫБРАТЬ ""а"" КАК п1, ""1"" КАК п2 ПОМЕСТИТЬ Т |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""б"", ""1"" |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""б"", ""2"" |ОБЪЕДИНИТЬ ВСЕ ВЫБРАТЬ ""в"", ""1"" |; | |ВЫБРАТЬ | п1 |ИЗ | Т |СГРУППИРОВАТЬ ПО | п1 |ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) = 1" вернул "а" "в" |
|||
29
Индийска праграмиста
09.07.10
✎
14:37
|
тема собственно по поводу этого запроса создана...зачем так сделано?
"ВЫБРАТЬ | СоответсвиеПодразделений.Подразделение, | СоответсвиеПодразделений.Организация, | МИНИМУМ(СоответсвиеПодразделений.ПодразделениеОрганизации) КАК ПодразделениеОрганизации, | МАКСИМУМ(СоответсвиеПодразделений.ПодразделениеОрганизации) КАК ПодразделениеОрг |ИЗ | РегистрСведений.СоответствиеПодразделенийИПодразделенийОрганизаций КАК СоответсвиеПодразделений |ГДЕ | СоответсвиеПодразделений.Подразделение = &Подразделение | И СоответсвиеПодразделений.Организация = &Организация | И СоответсвиеПодразделений.Организация <> ЗНАЧЕНИЕ(Справочник.Организации.ПустаяСсылка) | И СоответсвиеПодразделений.Подразделение <> ЗНАЧЕНИЕ(Справочник.Подразделения.ПустаяСсылка) | |СГРУППИРОВАТЬ ПО | СоответсвиеПодразделений.Подразделение, | СоответсвиеПодразделений.Организация | |ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) = 1" |
|||
30
Индийска праграмиста
09.07.10
✎
14:39
|
типовой код в упп...везде где выбирается подразделениеорганизации из этого регистра, такой запрос
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |