Reputation: 1334
I have the following code:
DECLARE @StartDate DATE = '2016-01-01'
,@EndDate DATE = '2016-12-31'
,@MaxValue float = 96.0
,@MinValue float = 95.0
,@pValue float = 0.000972222222222222
,@pValue2 float = 0.002
;WITH ctetest AS
(
SELECT @StartDate AS CDate, @MaxValue AS Case1, @MaxValue as Case2,
0 as OLNo
UNION ALL
SELECT dateadd(day,1,CDate) ,(1-@pValue) * Case1,
CASE WHEN Case2 < @MinValue THEN 96 ELSE (1-@pValue2) * Case2 END,
OLNo + (CASE WHEN Case2 < @MinValue THEN 1 ELSE 0 END)
FROM ctetest
WHERE dateadd(day,1,CDate)<=@EndDate
)
SELECT *
INTO #t1
FROM ctetest OPTION (MAXRECURSION 0)
SELECT @MinValue Val, MAX(OLNo) * 24 * @MinValue tRes, SUM((Case2 * 24)) Res1,
(SUM((Case2 * 24))) - (MAX(OLNo) * 24 * @MinValue) Res2
FROM #t1
The result should be:
----------------------------------------------
Val tRes Res1 Res2
----------------------------------------------
95.0 118560 838244.195613986 719684.195613986
My question is, how can I get a result (above) with range number starting from @MinValue
to 1. Like the table below:
----------------------------------------------
Val tRes Res1 Res2
----------------------------------------------
95.0 118560 838244.195613986 719684.195613986
94.0 67680 834131.776802389 766451.776802389
93.0 ?????? ???????????????? ????????????????
ff.
1.0 ?????? ???????????????? ????????????????
I want to put this code on my Store Procedures.
Does anyone know how to achieve this? Really appreciated.
Thank you.
Upvotes: 1
Views: 61
Reputation: 24763
changes :
; WITH
min_value AS -- Added this
(
SELECT MinValue = @MinValue
UNION ALL
SELECT MinValue = MinValue - 1
FROM min_value
WHERE MinValue > 0
),
ctetest AS
(
SELECT @StartDate AS CDate, @MaxValue AS Case1, @MaxValue as Case2,
0 as OLNo, MinValue
FROM min_value -- added this
UNION ALL
SELECT dateadd(day,1,CDate) ,(1-@pValue) * Case1,
CASE WHEN Case2 < MinValue THEN 96 ELSE (1-@pValue2) * Case2 END,
OLNo + (CASE WHEN Case2 < MinValue THEN 1 ELSE 0 END), MinValue
FROM ctetest
WHERE dateadd(day,1,CDate)<=@EndDate
)
SELECT MinValue Val,
MAX(OLNo) * 24 * @MinValue tRes, SUM((Case2 * 24)) Res1,
(SUM((Case2 * 24))) - (MAX(OLNo) * 24 * @MinValue) Res2
FROM ctetest
GROUP BY MinValue -- added this
ORDER BY MinValue DESC
OPTION (MAXRECURSION 0)
Upvotes: 2