【发布时间】:2016-08-29 07:36:33
【问题描述】:
我有以下 t-sql:
declare @startdate datetime, @finishdate datetime;
declare @declinerate float, @setpoint float;
declare @recoveredmw;
set @startdate = '2016-01-01';
set @finishdate = '2016-12-31'
set @declinerate = 0.0972 / 100;
set @setpoint = 98;
set @recoveredmw = @setpoint - 1;
;WITH ctetest AS
(
SELECT
@StartDate AS CDate,
@setpoint as Case2,
0 as OLNo
UNION ALL
SELECT
dateadd(day,1,CDate),
CASE
WHEN Case2 < @recoveredMW THEN @setpoint
ELSE (1 - @declinerate1) * Case2
END,
OLNo + (CASE WHEN Case2 < @recoveredMW THEN 1 ELSE 0 END)
FROM
ctetest
WHERE
dateadd(day, 1, CDate) <= @finishdate
)
SELECT *
FROM ctetest OPTION (MAXRECURSION 0)
那么结果应该是:
---------------------------------
CDate Case2 OLNo
---------------------------------
2016-01-01 98 0
2016-01-02 97.9 0
2016-01-03 97.81 0
ff.
2016-12-30 97.62 30
2016-12-31 97.52 30
它根据@startdate 和@finishdate 参数创建从1 月1 日到12 月底的数据。
我想要的是同时创建一个@recoveredMW。假设@setpoint 是 98,那么它将创建上面的结果,即@recoveredMW 是从@setpoint 减去 1。在2016-12-31 之后,它会从头开始创建另一个原始数据,但@recoveredMW 是负2 等等。
结果样本:
---------------------------------
CDate Case2 OLNo
---------------------------------
2016-01-01 98 0
2016-01-02 97.9 0
2016-01-03 97.81 0
ff.
2016-12-30 97.62 30
2016-12-31 97.52 30
2016-01-01 97 0 <-- New RawData after 2016-12-31, @recoveredMW-2
2016-01-02 96.91 0
2016-01-03 96.81 0
ff.
2016-12-31 96.53 30
有没有办法做到这一点?
谢谢。
【问题讨论】:
标签: sql sql-server tsql stored-procedures sql-server-2008-r2