#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
Комментариев нет:
Отправить комментарий