У меня есть таблица, которая выглядит так:
Year Value
-----------------
2013 -0.0016
2014 -0.0001
2015 0.0025
2016 -0.0003
2017 0.0023
2018 0.0002
И мне нужно выполнить условный агрегат, который приведет к созданию нового столбца. Условия заключаются в следующем:
Если значение отрицательное, агрегация начинается и не останавливается, пока значение не будет положительным. Затем ничего, пока значение не будет отрицательным снова... Результат будет выглядеть следующим образом:
Year Value AggCol
2013 -0.0016 -0.0016
2014 -0.0001 -0.0017
2015 0.0025 0.0008
2016 -0.0003 -0.0003
2017 0.0023 0.002
2018 0.0002 0.0002
Этот udf находится так близко, как я получил:
create function dbo.fn(@cYear numeric, @rate float)
returns float
as
begin
declare @pYear numeric
declare @return float
set @pYear = @cYear - 1
set @return = (select
case
when Value < 0 and @rate > 0 then null
when Value < 0 then Value + @rate
else @rate
end
from Table1
where [year] = @pYear)
return @return
end
Я в порядке с ответом в С#, если это будет проще, но предпочитает SQL. Проблема с созданной мной функцией заключается в том, что мне нужно ухватить результаты из предыдущей строки, чтобы добавить к значению, когда значение положительное.
Я всю ночь напролет искал подсказки и без радости...
EDIT: подумайте об этом как о значениях CPI за год, которые будут применяться к вашему счету сотового телефона вашим перевозчиком... Они только увеличат ваш счет по CPI и никогда не уменьшат его (если индекс CPI отрицательный)... но они будут компенсировать отрицательный ИПЦ прошлых лет по текущему ИПЦ в текущем году, если ИПЦ текущего года будет положительным (или сумма приведет к положительному)...
Это может или не может помочь, но это ситуация lol.