Страницы

Поиск по вопросам

среда, 22 января 2020 г.

SQL арифметическое вычитание

#sql #oracle


Как мне это реализовать?

Мне нужна сумма всех значений из столбца PPLAN, и из этой суммы нужно отнять значение
PPLAN.

Допустим, вся сумма = 89 473,79.
На первой строке будет значение 89473,79 - 2182,29 = 87291.5,
на второй будет 89473,79 - 2182,29 - 2182,29 = 85109.21
и т.д., пока не будет уже в конце 0.

Количество строк всегда разное, т.к. это зависит обычно от периода месяцев, может
быть 20 или 40, к примеру. Поэтому решил отталкиваться от всей суммы.

Как мне можно поставить счетчик? Или сама логика решения задачи некорректна?


    


Ответы

Ответ 1



Я бы такое предложил: select sum(pplan) over () - sum(pplan) over (order by duedate) from mytable Первое sum(pplan) over () - это просто полная сумма, а sum(pplan) over (order by duedate) - это сумма с накоплением, соответственно, у вас в каждой следующей строке будут значения 89473,79, 89473,79 - 2182,29, 89473,79 - 2182,29 - 2182,29 и так далее.

Ответ 2



Фактически вам нужна сумма всех последующих строк относительно текущей в указанной сортировке. Так что можно ничего не вычитать и получить сумму прямо по требуемому диапазону строк: select T.*, nvl( sum(pplan) over(order by duedate rows between 1 following and unbounded following) ,0) from Table T В последней строке возвращается NULL т.к. следующей 1 строки уже нет, превращаем его в 0 с помощью nvl. Информацию по работе предложения over() можно найти в документации по аналитическим функциям Oracle

Комментариев нет:

Отправить комментарий