|
Помогите разобраться с запросом | ☑ | ||
---|---|---|---|---|
0
mk-61
07.10.13
✎
12:42
|
Добрый день!
Осваиваю запросы на 8.2 и никак не могу разобраться с одной проблемкой. Итак, есть запрос: ВЫБРАТЬ РасходнаяНакладная.Ссылка, РасходнаяНакладная.Заказ ПОМЕСТИТЬ ТаблРН ИЗ Документ.РасходнаяНакладная КАК РасходнаяНакладная ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ТаблРН.Ссылка, ПоступлениеВКассу.Касса, СУММА(ПоступлениеВКассу.СуммаДокумента) ИЗ ТаблРН КАК ТаблРН ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеВКассу КАК ПоступлениеВКассу ПО (ТаблРН.Ссылка = ПоступлениеВКассу.ДокументОснование ИЛИ ТаблРН.Заказ = ПоступлениеВКассу.ДокументОснование) СГРУППИРОВАТЬ ПО ТаблРН.Ссылка, ПоступлениеВКассу.Касса В итоге получается такая табличка: № Ссылка Касса СуммаДокумента 1 РН НФ00-000003 от 19.09.2013 Основная касса 579 2 РН НФ00-000003 от 19.09.2013 Приватбанк 1121 3 РН ДН00-000054 от 21.09.2013 Основная касса 4 020 4 РН НФ00-000004 от 20.09.2013 NULL NULL 5 РН ДН00-000055 от 21.09.2013 Основная касса 32 6 РН ДН00-000055 от 21.09.2013 Аваль 132 7 РН ДН00-000039 от 20.09.2013 NULL NULL 8 РН ДН00-000009 от 17.09.2013 Основная касса 40 9 РН ДН00-000056 от 21.09.2013 Основная касса 250 Мне надо получить таблицу, чтобы в итоге по одной и той же накладной отбиралась Касса с максимальной суммой. Т.е. после выполнения запроса должны отсеяться строки 1 и 5. № Ссылка Касса СуммаДокумента 2 РН НФ00-000003 от 19.09.2013 Приватбанк 1121 3 РН ДН00-000054 от 21.09.2013 Основная касса 4 020 4 РН НФ00-000004 от 20.09.2013 NULL NULL 6 РН ДН00-000055 от 21.09.2013 Аваль 132 7 РН ДН00-000039 от 20.09.2013 NULL NULL 8 РН ДН00-000009 от 17.09.2013 Основная касса 40 9 РН ДН00-000056 от 21.09.2013 Основная касса 250 Подскажите, как доработать запрос, чтобы получить то, что я хочу ;) Надеюсь, выразился доступно для понимания. Спасибо. |
|||
1
Rovan
гуру
07.10.13
✎
12:45
|
ВЫБРАТЬ
ТаблРН.Ссылка, ПоступлениеВКассу.Касса, СУММА(ПоступлениеВКассу.СуммаДокумента) ПОМЕСТИТ ВТ_ВСЕ ИЗ ТаблРН КАК ТаблРН ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеВКассу КАК ПоступлениеВКассу ПО (ТаблРН.Ссылка = ПоступлениеВКассу.ДокументОснование ИЛИ ТаблРН.Заказ = ПоступлениеВКассу.ДокументОснование) СГРУППИРОВАТЬ ПО ТаблРН.Ссылка, ПоступлениеВКассу.Касса ; ВЫБРАТЬ все.Касса, МАКСИМУМ(все.СуммаДокумента) ИЗ ВТ_ВСЕ как все |
|||
2
mk-61
07.10.13
✎
14:58
|
(1)
В Вашем варианте "Поле не входит в группу - Касса". Если сгруппирую, то вообще не то, что надо. |
|||
3
Euguln
07.10.13
✎
15:04
|
(2) Покурить агрегатные функции в запросе не предлагать?
|
|||
4
mk-61
07.10.13
✎
15:04
|
(3) Курил - не помогает. ;)
|
|||
5
Euguln
07.10.13
✎
15:06
|
(4) Не заметно, где в запросе использование функции МАКСИМУМ?
|
|||
6
mk-61
07.10.13
✎
15:06
|
(3) Предложите хотя бы какую курить. Может не тем интересовался.
|
|||
7
mk-61
07.10.13
✎
15:08
|
(5) В запросе (1) МАКСИМУМ есть. Я такой вариант пробовал и до того.
|
|||
8
mk-61
07.10.13
✎
15:09
|
Вот вариант, предложенный в (1)
ВЫБРАТЬ ВТ_Все.Касса, МАКСИМУМ(Сумма) ИЗ Вт_Все КАК Все Но тогда требует группировку. После группировки вообще не то, что надо получается |
|||
9
Euguln
07.10.13
✎
15:12
|
(8) а применить к запросу в (0) вместо СУММА МАКСИМУМ не пробовал?
|
|||
10
viktor_vv
07.10.13
✎
15:19
|
ВЫБРАТЬ
ТаблРН.Ссылка КАК Ссылка, ПоступлениеВКассу.Касса КАК Касса, СУММА(ПоступлениеВКассу.СуммаДокумента) КАК СуммаПост Поместить ВТПоступления ИЗ ТаблРН КАК ТаблРН ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеВКассу КАК ПоступлениеВКассу ПО (ТаблРН.Ссылка = ПоступлениеВКассу.ДокументОснование ИЛИ ТаблРН.Заказ = ПоступлениеВКассу.ДокументОснование) СГРУППИРОВАТЬ ПО ТаблРН.Ссылка, ПоступлениеВКассу.Касса ;//////////// ВЫБРАТЬ Ссылка КАК Ссылка, Касса, МаксСумма ИЗ ВТПоступления КАК ВТПоступления Где (Ссылка,Касса) В ( Выбрать Первые 1 ВТПоступления2.Ссылка ИЗ ВТПоступления2 КАК ВТПоступления2 ГДЕ ВТПоступления2.Ссылка = ВТПоступления.Ссылка Сортировать по ВТПоступления2.СуммаМакс Убыв , ВТПоступления2.Касса ) Тормозной правда может быть, там еще одну временную надо, чтоб быстрее было, лениво писать. |
|||
11
viktor_vv
07.10.13
✎
15:20
|
(10)+ В псоледнем запросе
МаксСумма ->> СуммаПост |
|||
12
viktor_vv
07.10.13
✎
15:22
|
(10)+ И вместо
Выбрать Первые 1 ВТПоступления2.Ссылка писать Выбрать Первые 1 ВТПоступления2.Ссылка, ВТПоступления2.Касса |
|||
13
mk-61
07.10.13
✎
15:23
|
(9) Если заменить сумму на максимум, то результат не верный. Так как в итоге получу максимальный результат по счету "Касса" и максимальный по "Приватбанк". Мне надо только один из двух. С указанием по какому счету этот максимум достигнут.
|
|||
14
Euguln
07.10.13
✎
15:26
|
(13) не понял. Результат такого запроса покажи
|
|||
15
mk-61
07.10.13
✎
15:30
|
(14) первая табличка в (0), фактически, и есть результат такого запроса
|
|||
16
viktor_vv
07.10.13
✎
15:33
|
(13) Не мучайся, не получится просто через максимум то, что тебе надо.
|
|||
17
mk-61
07.10.13
✎
15:34
|
(16)я это уже давно понял. сейчас будут с твоим вариантом разбираться. спасибо.
|
|||
18
viktor_vv
07.10.13
✎
15:38
|
||||
19
mk-61
07.10.13
✎
15:38
|
(10) ВТПоступления2 - это какая таблица?
|
|||
20
viktor_vv
07.10.13
✎
15:40
|
(19) Упс. Та же самая .
ИЗ ВТПоступления КАК ВТПоступления2 |
|||
21
Euguln
07.10.13
✎
16:01
|
ВЫБРАТЬ РАЗЛИЧНЫЕ не пробовал?
|
|||
22
viktor_vv
07.10.13
✎
17:23
|
Вот вариант через соединения
ТекстЗапроса = " |ВЫБРАТЬ | ТаблРН.Ссылка КАК Ссылка, | ПоступлениеВКассу.Касса КАК Касса, | СУММА(ПоступлениеВКассу.СуммаДокумента) КАК СуммаПост |Поместить | ВТПоступления |ИЗ | ТаблРН КАК ТаблРН | ЛЕВОЕ СОЕДИНЕНИЕ Документ.ПоступлениеВКассу КАК ПоступлениеВКассу | ПО (ТаблРН.Ссылка = ПоступлениеВКассу.ДокументОснование | ИЛИ ТаблРН.Заказ = ПоступлениеВКассу.ДокументОснование) |СГРУППИРОВАТЬ ПО | ТаблРН.Ссылка, | ПоступлениеВКассу.Касса |;//////////// |ВЫБРАТЬ | Ссылка КАК Ссылка, | Максимум(СуммаПост) КАК МаксСумма |Поместить | ВТМаксСумма |ИЗ | ВТПоступления КАК ВТПоступления |Сгурппировать ПО | Ссылка |; |///////// |ВЫБРАТЬ | Ссылка КАК Ссылка, | Касса, | СуммаПост | |ИЗ | ВТПоступления КАК ВТПоступления | Внутренне соединение ( | // на случай если по двум разным кассам одинаковые суммы по одной накладной прошли | // возьмем еще максимум по кассе, чтобы выбрать одну какую-то (в данном случае с максимальной ссылкой) | Выбрать | ВТПоступления2.Ссылка КАК Ссылка, | ВТПоступления2.СуммаПост КАК СуммаПост, | Максимум(ВТПоступления2.Касса) КАК Касса, | ИЗ | ВТПоступления КАК ВТПоступления2 | Внутреннее соединение ВТМаксСумма КАК ВТМаксСумма | ПО ВТМаксСумма.МаксСумма = ВТПоступления2.СуммаПост И ВТМаксСумма.Ссылка = ВТПоступления2.Ссылка | Сгруппировать ПО | ВТПоступления2.Ссылка , ВТПоступления2.СуммаПост | ) КАК СвернутоПоСумме | ПО СвернутоПоСумме.Ссылка = ВТПоступления.Ссылка И СвернутоПоСумме.Касса = ВТПоступления.Касса |"; |
|||
23
mk-61
07.10.13
✎
18:02
|
(22) О! Похоже, то что надо. Спасибо.
ЗЫ: Блин, а я по своей наивности все пытался агрегатными функциями в три строки это реализовать... |
|||
24
viktor_vv
07.10.13
✎
18:22
|
(23) В (10) то же самое, разве что немного сложнее въехать.
|
|||
25
viktor_vv
07.10.13
✎
19:08
|
Ну и в (22) Переборщил с соединениями. Там в подзапросе уже то, что тебе надо. Так что последний запос пакета такой.
| Выбрать | ВТПоступления.Ссылка КАК Ссылка, | ВТПоступления.СуммаПост КАК СуммаПост, | Максимум(ВТПоступления.Касса) КАК Касса, | ИЗ | ВТПоступления КАК ВТПоступления | Внутреннее соединение ВТМаксСумма КАК ВТМаксСумма | ПО ВТМаксСумма.МаксСумма = ВТПоступления.СуммаПост И ВТМаксСумма.Ссылка = ВТПоступления.Ссылка | Сгруппировать ПО | ВТПоступления.Ссылка , ВТПоступления.СуммаПост |
|||
26
mk-61
07.10.13
✎
19:39
|
(25) Сенкс еще раз ;)
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |