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