У меня есть таблица, которая выглядит следующим образом:SQL Server: условный агрегат;
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
Я нормально с ответом в C# если это будет проще, но лучше SQL. Проблема с созданной мной функцией заключается в том, что мне нужно ухватить результаты из предыдущей строки, чтобы добавить к значению, когда значение положительное.
Я всю ночь здесь в поисках улик и нет радости ...
EDIT: Так что думайте о них как значения индекса потребительских цен за год, которые должны применяться на ваш счет мобильного телефона на ваш носитель ... Они будут только увеличивать ваш счет по индексу потребительских цен и никогда не уменьшать его (если индекс потребительских цен отрицателен) ... но они будут компенсировать отрицательный ИПЦ предыдущих лет по текущему индексу потребительских цен, если индекс потребительских цен в текущем году является положительным (или сумма результатов в положительном) ...
Это может или не может помочь, но это ситуация LOL.
Какую версию SQL Server вы используете? –
Вы можете сделать это, используя запрос в SQL Server, но для этого требуются рекурсивные CTE. –
2012, и я в порядке с CTE ... имею доступ к dbo, поэтому могу делать все, что нужно. – user3486773