|
Подскажите с запросом | ☑ | ||
---|---|---|---|---|
0
Helg
26.12.12
✎
14:03
|
Есть запрос. Он выдает агентов и количество заключенных договоров. А также их систему оплаты.
ВЫБРАТЬ РезультатыАгентовОбороты.Агент, РезультатыАгентовОбороты.Фонд, РезультатыАгентовОбороты.ЦелевыхОборот, РезультатыАгентовОбороты.ТранзитныхОборот, СистемыОплатыАгентаСрезПоследних.СистемаОплаты, ВложенныйЗапрос.ВсегоДоговоров ИЗ РегистрНакопления.РезультатыАгентов.Обороты(&ДатаНач, &ДатаКон, , ) КАК РезультатыАгентовОбороты ЛЕВОЕ СОЕДИНЕНИЕ РегистрСведений.СистемыОплатыАгента.СрезПоследних(&ДатаНач, ) КАК СистемыОплатыАгентаСрезПоследних ПО РезультатыАгентовОбороты.Агент = СистемыОплатыАгентаСрезПоследних.Агент И РезультатыАгентовОбороты.Фонд = СистемыОплатыАгентаСрезПоследних.Фонд ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ РезультатыАгентовОбороты.Агент КАК Агент, РезультатыАгентовОбороты.ЦелевыхОборот + РезультатыАгентовОбороты.ТранзитныхОборот КАК ВсегоДоговоров ИЗ РегистрНакопления.РезультатыАгентов.Обороты(&ДатаНач, &ДатаКон, , ) КАК РезультатыАгентовОбороты) КАК ВложенныйЗапрос ПО РезультатыАгентовОбороты.Агент = ВложенныйЗапрос.Агент И есть справочник СистемыОплаты. В нем табличная часть Пороговые значения вида: Порог СуммаОплаты 1 100 5 200 10 300. И нужно к каждой строке запроса привязать сумму оплаты за договор, сравнивая по полю запроса "ВсегоДоговоров". Т.е. что-то типа ВЫБРАТЬ ПЕРВЫЕ 1 СистемыОплатыПороговыеЗначения.Порог, СистемыОплатыПороговыеЗначения.ОплатаЦелевой, СистемыОплатыПороговыеЗначения.ОплатаТранзитный, СистемыОплатыПороговыеЗначения.Ссылка.Наименование ИЗ Справочник.СистемыОплаты.ПороговыеЗначения КАК СистемыОплатыПороговыеЗначения ГДЕ СистемыОплатыПороговыеЗначения.Порог > &Порог И СистемыОплатыПороговыеЗначения.Ссылка = &Ссылка Но как этот 2-й запрос связать с первым? Т.е. параметр Порог равен значению ВсегоДоговоров из первого запроса и параметр Ссылка равен значению СистемыОплатыАгентаСрезПоследних.СистемаОплаты из первого запроса. |
|||
1
Reset
26.12.12
✎
14:06
|
Связать по КоличествоВПеервомЗапросе>КоличествоВоВтором
затем использовать агрегатную ф-ю Максимум |
|||
2
Reset
26.12.12
✎
14:07
|
или если "Порог равен значению ВсегоДоговоров" то на равенство, но тогда вопрос непонятен
|
|||
3
Helg
26.12.12
✎
14:10
|
(2) Можно и так СистемыОплатыПороговыеЗначения.Порог >= &Порог
|
|||
4
Reset
26.12.12
✎
14:10
|
а, прочитатл внимательней, (2) отменяется.
и в (1) не "<" а ">" и Минимум вметос максимум |
|||
5
Helg
26.12.12
✎
14:10
|
(1) Сейчас попробую
|
|||
6
Helg
26.12.12
✎
14:11
|
Первый запрос во ВременнуюТаблицу?
|
|||
7
Reset
26.12.12
✎
14:11
|
не "<" а ">"
короче зависит от условий, наклываемм на порадание меджуде "порогами" |
|||
8
Reset
26.12.12
✎
14:12
|
форум походу форматирует < >
или я тупой опечатываюсь два раза |
|||
9
Reset
26.12.12
✎
14:13
|
наклываемм на порадание меджуде "порогами"
==> накладываемых на попадание между порогами я разучился печатать, поду учиться |
|||
10
Reset
26.12.12
✎
14:15
|
(6) Во временную, как минимум для читаемости
|
|||
11
Reset
26.12.12
✎
14:21
|
Выбрать Максимум(СистемыОплатыПороговыеЗначения.СуммаОплаты)
ПО СистемыОплатыПороговыеЗначения.Ссылка = ПервыйЗапрос.СистемаОплаты И ПервыйЗапрос.ВсегоДоговоров>СистемыОплатыПороговыеЗначения.Порог Сгрупппировать по ...Список полей Будет для ВсегоДоговоров=7 выдавать СуммаОплаты 200 для приведенного примера |
|||
12
Helg
26.12.12
✎
14:46
|
(11) А можно как-то сделать не функцией МАКСИМУМ, а выражением ПЕРВЫЕ 1. Кто-нибудь знает как?
|
|||
13
Helg
26.12.12
✎
14:47
|
Лучше через ПЕРВЫЕ 1. Но как связать пока не придумал.
|
|||
14
Helg
26.12.12
✎
14:55
|
Кто-нибудь знает?
|
|||
15
sapphire
26.12.12
✎
14:58
|
(12) Нельзя.
|
|||
16
sapphire
26.12.12
✎
14:59
|
(14) Многие знают. Ответ НЕЛЬЗЯ.
1С не поддерживает скалярные запросы. |
|||
17
Helg
26.12.12
✎
15:03
|
в SQL это было бы так
OUTER APPLY (Select top 1 from СистемыОплатыПороговыеЗначения where ...) Оператор OUTER APPLY не поддерживается? |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |