У меня есть регистр сведений, в нем три измерения. Я создал таблицу в которой все данные из регистра, а так же напротив них число, которое обозначает приоритет. Мне нужно вывести следующее: если есть строки в которых одинаковые первые два измерения, то нужно выбирать ту строку у которой максимальное число, а так же нужно вывести 3 измерения которое соответствует выбранной строке.
Я пытался сделать это таким запросом, однако добавление третьего измерения дублирует строки в результате.
Я пытался сделать это таким запросом, однако добавление третьего измерения дублирует строки в результате.
ВЫБРАТЬ
НормДаты.Контрагент КАК Контрагент,
НормДаты.Дистрибутив КАК Дистрибутив,
МАКСИМУМ(НормДаты.Приоритет) КАК Приоритет
ИЗ
(ВЫБРАТЬ
СкидкиСистем.Период КАК Период,
СкидкиСистем.Контрагент КАК Контрагент,
СкидкиСистем.Дистрибутив КАК Дистрибутив,
ВЫБОР
КОГДА СкидкиСистем.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3000, 1, 1)
ИНАЧЕ СкидкиСистем.ДатаОкончания
КОНЕЦ КАК ДатаОкончания,
ВЫБОР
КОГДА СкидкиСистем.Скидка В (&Проценты)
ТОГДА 1
КОГДА СкидкиСистем.Скидка В (&Предоплаты)
ТОГДА 2
КОНЕЦ КАК Приоритет,
СкидкиСистем.ТипСкидки КАК ТипСкидки
ИЗ
РегистрСведений.СкидкиСистем КАК СкидкиСистем) КАК НормДаты
ГДЕ
НормДаты.ДатаОкончания > &ДатаВыбранная
И НормДаты.Период < &ДатаВыбранная
СГРУППИРОВАТЬ ПО
НормДаты.Контрагент,
НормДаты.Дистрибутив
ПоказатьПо теме из базы знаний
Найденные решения
(1) Поместить данные регистра во временную таблицу Т1.
Взять данные временной таблицы, сгруппировать по 2м измерениям и максимум по приоритету, положить в Т2.
Соединить Т2 с Т1 левым соединением по 2 измерениям и приоритету, чтобы получить из Т1 третье измерение.
Взять данные временной таблицы, сгруппировать по 2м измерениям и максимум по приоритету, положить в Т2.
Соединить Т2 с Т1 левым соединением по 2 измерениям и приоритету, чтобы получить из Т1 третье измерение.
Остальные ответы
Подписаться на ответы
Инфостарт бот
Сортировка:
Древо развёрнутое
Свернуть все
(1) Поместить данные регистра во временную таблицу Т1.
Взять данные временной таблицы, сгруппировать по 2м измерениям и максимум по приоритету, положить в Т2.
Соединить Т2 с Т1 левым соединением по 2 измерениям и приоритету, чтобы получить из Т1 третье измерение.
Взять данные временной таблицы, сгруппировать по 2м измерениям и максимум по приоритету, положить в Т2.
Соединить Т2 с Т1 левым соединением по 2 измерениям и приоритету, чтобы получить из Т1 третье измерение.
(2)
Вообщем все как вы сказали, нужно сначала выбрать данные которые нужны, сделать группировку по двум измерениям контрагент и система и затем добавить приоритет к выборке. ЗАтем надо добавить приоритет ко всем изначальным данным, после чего сделать внутреннее соединение по по всем начальным данным и выборке при условии равенства приоритета и двух измерений.
Вообщем все как вы сказали, нужно сначала выбрать данные которые нужны, сделать группировку по двум измерениям контрагент и система и затем добавить приоритет к выборке. ЗАтем надо добавить приоритет ко всем изначальным данным, после чего сделать внутреннее соединение по по всем начальным данным и выборке при условии равенства приоритета и двух измерений.
ВЫБРАТЬ
НормДаты.Контрагент КАК Контрагент,
НормДаты.Дистрибутив КАК Дистрибутив,
МАКСИМУМ(НормДаты.Приоритет) КАК Приоритет
ИЗ
(ВЫБРАТЬ
СкидкиСистем.Период КАК Период,
СкидкиСистем.Контрагент КАК Контрагент,
СкидкиСистем.Дистрибутив КАК Дистрибутив,
ВЫБОР
КОГДА СкидкиСистем.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
ТОГДА ДАТАВРЕМЯ(3000, 1, 1)
ИНАЧЕ СкидкиСистем.ДатаОкончания
КОНЕЦ КАК ДатаОкончания,
ВЫБОР
КОГДА СкидкиСистем.Скидка В (&Проценты)
ТОГДА 1
КОГДА СкидкиСистем.Скидка В (&Предоплаты)
ТОГДА 2
КОНЕЦ КАК Приоритет,
СкидкиСистем.ТипСкидки КАК ТипСкидки
ИЗ
РегистрСведений.СкидкиСистем КАК СкидкиСистем) КАК НормДаты
ГДЕ
НормДаты.ДатаОкончания > &ДатаВыбранная
И НормДаты.Период < &ДатаВыбранная
СГРУППИРОВАТЬ ПО
НормДаты.Контрагент,
НормДаты.Дистрибутив
Показать
Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот