|
Работа ИМЕЮЩИЕ и Количество(*) > 1 | ☑ | ||
---|---|---|---|---|
0
Терпение и труд
02.01.21
✎
02:46
|
Доброй ночи.
Пытаюсь разобраться с тем, как работает ИМЕЮЩИЕ. Есть тестовый пример, табличная часть документа, которая содержит ФизЛицо (справочник), ПричинуИзмененияФамилии (справочник) и Фамилию (строка) В ТЧ 6 записей: Семенова Ольга Собственное желание Семенова Петрова Марина Брак Петрова Иванова Екатерина Брак Иванова Петрова Марина Развод Сидорова Петрова Марина Развод Сидорова Семенова Ольга Развод Игнатенко Далее к этой ТЧ применяется запрос: Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | ДанныеСотрудниковДанные.ФизЛицо КАК ФизЛицо, | ДанныеСотрудниковДанные.ПричинаИзменения КАК ПричинаИзменения, | КОЛИЧЕСТВО(РАЗЛИЧНЫЕ ДанныеСотрудниковДанные.Фамилия) КАК Фамилия |ИЗ | Документ.ДанныеСотрудников.Данные КАК ДанныеСотрудниковДанные |ГДЕ | ДанныеСотрудниковДанные.Ссылка = &Ссылка | |СГРУППИРОВАТЬ ПО | ДанныеСотрудниковДанные.ФизЛицо, | ДанныеСотрудниковДанные.ПричинаИзменения | |ИМЕЮЩИЕ | КОЛИЧЕСТВО(*) > 1"; Запрос.УстановитьПараметр("Ссылка", Ссылка); Выборка = Запрос.Выполнить().Выгрузить(); Запрос выдаёт 1 Развод Петрова Марина Собственно, вопрос. Насколько я понял теорию, ИМЕЮЩИЕ применяет условие к уже сгруппированной таблице, а в данном случае, если убрать ИМЕЮЩИЕ, по отладчику таблица содержит 5 строк, везде количество 1 (потому что 2 строки идентичные, они "схлопнулись"), насколько я понял, КОЛИЧЕСТВО(*) ищет одинаковые полностью результаты выборки, то есть, в данном случае, поскольку в группировке все строки встречаются ровно по 1 разу, то результат должен быть пустой. Но в таблицу попала Петрова. Получается, что ИМЕЮЩИЕ плевать на группировку в данном случае? |
|||
1
СвинТуз
02.01.21
✎
04:58
|
Звезда в шоке.
Вопрос в чем? По твоей группировке и твоим данным у тебе две одинаковые строки по Петровой. Вот она и осталась. |
|||
2
Chameleon1980
02.01.21
✎
07:19
|
сделай имеющие количество различные фамилия
а ты про номера строк забыл при звёздочек? |
|||
3
Chameleon1980
02.01.21
✎
07:21
|
сделай выбрать * из данныеСотркдниеов
|
|||
4
Ненавижу 1С
гуру
02.01.21
✎
07:23
|
А как же твои данные:
Петрова Марина Развод Сидорова Петрова Марина Развод Сидорова КОЛИЧЕСТВО(*) это счётчик строк без условия полей на NULL |
|||
5
Терпение и труд
02.01.21
✎
10:54
|
(2) А номера строк обязательно выбирать?
|
|||
6
Терпение и труд
02.01.21
✎
10:55
|
(4) Строк именно до группировки, исходных?
|
|||
7
Ненавижу 1С
гуру
02.01.21
✎
11:02
|
||||
8
Ненавижу 1С
гуру
02.01.21
✎
11:07
|
(2) причем тут номера строк? они что есть, что их нет в этом запросе
|
|||
9
2mugik
02.01.21
✎
11:15
|
вроде вначале срабатывает "где". Потом остальное.
|
|||
10
Терпение и труд
02.01.21
✎
11:21
|
(7) Ага, вот теперь легче. То есть, ещё раз для тупых, КОЛИЧЕСТВО(*) определяет, сколько строк вошли в каждую группировку?
|
|||
11
Ненавижу 1С
гуру
02.01.21
✎
11:34
|
(10) да, именно так
|
|||
12
youalex
02.01.21
✎
11:41
|
(9) если правильно помню, порядок такой: "ИЗ", "ГДЕ", "ВЫБРАТЬ", "СГРУППИРОВАТЬ", "ИМЕЮЩИЕ", "УПОРЯДОЧИТЬ"
|
|||
13
Терпение и труд
02.01.21
✎
11:42
|
(11) Большое вам спасибо! Разобрался, теперь всё понятно.
|
|||
14
2mugik
02.01.21
✎
12:03
|
(12)неправильно выразился - имеющие количество()>1 относится не к "итоговой" таблице, а к группировкам т.е. Количество различные в выбрать и количество в имеющие никак не связаны.
|
|||
15
youalex
02.01.21
✎
12:08
|
(12) + наврал, ВЫБРАТЬ - предпоследний, перед УПОРЯДОЧИТЬ (это вообще отдельно)
(14) ИМЕЮЩИЕ - это, условно, "ГДЕ" для агрегатных функций (итоговых, как ты пишешь) . |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |