0
から同時結果に私は、次のT-SQLを持っている:単一のパラメータSQL Serverのストアドプロシージャ
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
それはまで1月1日からのデータを作成し、 12月末は@startdate
と@finishdate
です。
私が欲しいのは、同時に@recoveredMW
を作成することです。例えば、@setpoint
が98であるとすると、上記の結果は、から@recoveredMW
がマイナス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
はこれを行う方法はありますか?
ありがとうございます。
それは良いですが、私は同時にrecovermwを1にする必要があります。答えは96までです。 – Haminteu
変更されました。 EDIT 1 – Squirrel
を参照してください...それは最高です。乾杯、:) – Haminteu