Ich habe folgende T-SQL:Gleichzeitige resultieren aus einzelnen Parameter SQL Server gespeicherte Prozedur
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)
Dann sollte das Ergebnis sein:
---------------------------------
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
, bis die eine Daten aus 1. JANUAR schafft Ende Dezember Basis auf @startdate
und @finishdate
Parameter.
Was ich will, ist eine gleichzeitige @recoveredMW
erstellen. Nehmen wir an, die @setpoint
ist 98, dann wird das Ergebnis erstellt, über dem @recoveredMW
ist minus 1 aus der @setpoint
. Nach 2016-12-31
wird ein weiterer Rohdatenanfang von Anfang an erstellt, aber @recoveredMW
ist minus 2 und so weiter.
Ergebnis Beispiel:
---------------------------------
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
Gibt es eine Möglichkeit, dies zu tun?
Vielen Dank.
Das ist gut, aber ich möchte die gleichzeitige wiederhergestelltmw bis 1. Die Antwort ist bis 96 nur. – Haminteu
Geändert. Siehe EDIT 1 – Squirrel
Mate ... Das ist genial. Prost, :) – Haminteu