1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
|
CREATE TABLE #T (
Rang INT NOT NULL
, Valeur DECIMAL(10,4) NOT NULL
, Test BIT NULL
, Cible DECIMAL(10,4) NULL
)
;
INSERT INTO #T (Rang, Valeur) VALUES
(1, 20 )
,(2, 21 )
,(3, 19 )
,(4, 28 )
,(5, 23 )
,(6, 25 )
;
WITH CTE AS (
SELECT
Rang
, Valeur
, CAST(0 AS BIT) AS test
, Valeur AS Cible
FROM #T
WHERE Rang = 1
UNION ALL
SELECT
T.Rang
, T.Valeur
, CAST(CASE WHEN T.Valeur > CTE.Cible * 1.10 THEN 1 ELSE 0 END AS BIT)
, CAST(CTE.Cible + CASE WHEN T.Valeur > CTE.Cible * 1.10 THEN 2 ELSE 0 END AS DECIMAL(10,4))
FROM CTE
INNER JOIN #T AS T
ON T.Rang = CTE.Rang + 1
)
UPDATE T
SET test = CTE.test
, Cible = CTE.Cible
FROM #T AS T
INNER JOIN CTE
ON CTE.Rang = T.Rang
SELECT *
FROM #T
;
DROP TABLE #T |
Partager