понедельник, 20 мая 2019 г.

Нарастающий итог с условием


Есть таблица (hnull) с начислениями какой-либо величины за каждый год:








Необходимо без применения PL/SQL посчитать величину начисления нарастающим итогом (growth) в порядке увеличения года (year). При этом если начисление текущего года (val) меньше нарастающего итога предыдущих годов, то этот месяц не вносит свой вклад в нарастающий итог. Т.е. результат будет:









Решение:


SELECT val, year, growth
FROM  hnull
MODEL
DIMENSION BY (YEAR)
MEASURES (val, 0 growth)
RULES(
       growth [YEAR] = case
          when val[cv()] <  nvl(growth[cv()-1],0) then growth[cv()-1]
        else
          val[cv()] + nvl(growth[cv()-1],0)
       end
)
ORDER  BY YEAR;

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

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