|
Запрос с вычитанием | ☑ | ||
---|---|---|---|---|
0
mataranga
05.05.16
✎
11:21
|
Доброе время суток,
Как составить запрос? Есть таблица с суммами 3.234 2.000 1.000 1.130 2.300 1.000 2.000 и так далее есть определенная сумма допустим 10.000 . и надо из 10.000 вычесть каждую строку и записать результат, если меньше 0 то остановится 3.234 6766 2.000 4766 1.000 3766 1.130 2636 2.300 336 1.000 0 2.000 0 |
|||
1
mikecool
05.05.16
✎
11:22
|
хорошая задача, делай
|
|||
2
PR пять
05.05.16
✎
11:23
|
Правильный ответ: не делать это в запросе.
|
|||
3
andreymongol82
05.05.16
✎
11:24
|
Это точно именно запросом надо сделать?
|
|||
4
mikecool
05.05.16
✎
11:24
|
+1 не знаешь, как это сделать в запросе - сделай постобработкой, будет быстрее
|
|||
5
mataranga
05.05.16
✎
11:25
|
если подсказок нет то придется делать не в запросе
|
|||
6
AneJIbcuH
05.05.16
✎
11:26
|
Таблица с суммами как получается?
|
|||
7
mataranga
05.05.16
✎
11:28
|
(6) таблица с суммами получается результатом других запросов
|
|||
8
salvator
05.05.16
✎
11:30
|
Можешь сделать в запросе, только все равно потом придется итоговую таблицу обрезать.
|
|||
9
catena
05.05.16
✎
11:31
|
(7)Запросом нужны будут номера строк или какой-то порядковый идентификатор.
|
|||
10
AneJIbcuH
05.05.16
✎
11:41
|
Исходных данных маловато, если просто числа, то вот я бы так сделал:
"ВЫБРАТЬ 60 КАК ЧислоВычитаемое ПОМЕСТИТЬ ВТ_ПервоеЧисло ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ РеализацияТоваровУслугТовары.Сумма ПОМЕСТИТЬ ВТ_Числа ИЗ Документ.РеализацияТоваровУслуг.Товары КАК РеализацияТоваровУслугТовары ГДЕ РеализацияТоваровУслугТовары.Ссылка = &Ссылка ; //////////////////////////////////////////////////////////////////////////////// ВЫБРАТЬ ВТ_Числа.Сумма - ВТ_ПервоеЧисло.ЧислоВычитаемое КАК Результат ИЗ ВТ_ПервоеЧисло КАК ВТ_ПервоеЧисло, ВТ_Числа КАК ВТ_Числа ГДЕ ВТ_Числа.Сумма - ВТ_ПервоеЧисло.ЧислоВычитаемое > 0" |
|||
11
AneJIbcuH
05.05.16
✎
11:42
|
Т.е. результат запроса сразу содержит только положительные значения. Второй пакет взял для примера (Типа таблица с суммами)
|
|||
12
catena
05.05.16
✎
11:48
|
(11)Надо вычесть каждую строку последовательно. ФИФО запросом.
|
|||
13
andreymongol82
05.05.16
✎
11:49
|
(10) Не, здесь последовательно надо вычитать из одной суммы суммы из таблицы
|
|||
14
AneJIbcuH
05.05.16
✎
11:52
|
(12) Ну хорошо, убираем ограничение на положительные. Второй пакет оставляем в своей сортировке. (13) Поменять местами Вычитаемое.
|
|||
15
andreymongol82
05.05.16
✎
11:55
|
(14) Тоже нет. Получается, что вычитаешь из 60 каждый раз сумму из строки. А надо:
1.60-сумма из строки 1 2.60-сумма из строки 1 - сумма из строки 2 и т.д. |
|||
16
AneJIbcuH
05.05.16
✎
11:59
|
(15) Ага, понял.
|
|||
17
andreymongol82
05.05.16
✎
12:04
|
В принципе можно так.
Первый пакет запроса: нумеруем вычитаемую таблицу как-то Второй пакет: полученную таблицу объединяем саму с собой по номеру строки суммируем суммы, условие номер строкитабл1>=номерстрокитабл2 Третий пакет: вот теперь полное объединение таблици из одной строки и таблицы, которую получили во втором пакете. Условие >0 |
|||
18
Ildarovich
05.05.16
✎
12:25
|
Это задача про нарастающий итог, ФИФО запросом и тому подобное. Самый быстрый способ решения запросом описан здесь: http://catalog.mista.ru/public/201526/ . Там же приведены ссылки на более простые способы.
|
|||
19
mataranga
05.05.16
✎
12:41
|
(18) да это то что нужно спасибо
|
|||
20
andreymongol82
05.05.16
✎
12:48
|
(18) А ведь верно. Способ в (17) не самый быстрый по производительности. Зато программируется быстрей ).
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |