Как игнорировать поле при группировке?

1. user2097013 22.07.24 23:04 Сейчас в теме
"ВЫБРАТЬ
	             |	НормДаты.Контрагент КАК Контрагент,
	             |	НормДаты.Дистрибутив КАК Дистрибутив,
	             |	МАКСИМУМ(НормДаты.Приоритет) КАК Приоритет,
	             |	КОЛИЧЕСТВО(РАЗЛИЧНЫЕ НормДаты.ТипСкидки) КАК ТипСкидки
	             |ИЗ
	             |	(ВЫБРАТЬ
	             |		СкидкиСистем.Период КАК Период,
	             |		СкидкиСистем.Контрагент КАК Контрагент,
	             |		СкидкиСистем.Дистрибутив КАК Дистрибутив,
	             |		ВЫБОР
	             |			КОГДА СкидкиСистем.ДатаОкончания = ДАТАВРЕМЯ(1, 1, 1)
	             |				ТОГДА ДАТАВРЕМЯ(3000, 1, 1)
	             |			ИНАЧЕ СкидкиСистем.ДатаОкончания
	             |		КОНЕЦ КАК ДатаОкончания,
	             |		ВЫБОР
	             |			КОГДА СкидкиСистем.Скидка В (&Проценты)
	             |				ТОГДА 1
	             |			КОГДА СкидкиСистем.Скидка В (&Предоплаты)
	             |				ТОГДА 2
	             |		КОНЕЦ КАК Приоритет,
	             |		СкидкиСистем.ТипСкидки КАК ТипСкидки
	             |	ИЗ
	             |		РегистрСведений.СкидкиСистем КАК СкидкиСистем) КАК НормДаты
	             |		ВНУТРЕННЕЕ СОЕДИНЕНИЕ РегистрСведений.СкидкиСистем КАК СкидкиСистем
	             |		ПО НормДаты.Контрагент = СкидкиСистем.Контрагент
	             |			И НормДаты.Дистрибутив = СкидкиСистем.Дистрибутив
	             |ГДЕ
	             |	НормДаты.ДатаОкончания > &ДатаВыбранная
	             |	И НормДаты.Период < &ДатаВыбранная
	             |
	             |СГРУППИРОВАТЬ ПО
	             |	НормДаты.Контрагент,
	             |	НормДаты.Дистрибутив";
Показать


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

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

СГРУППИРОВАТЬ ПО
    НормДаты.Контрагент,
    НормДаты.Дистрибутив
Показать полностью
2. Asgard90 23.07.24 04:25 Сейчас в теме
Проблема в соединении
3. user2097013 23.07.24 14:39 Сейчас в теме
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот