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 49 50 51 52 53 54 55 56 57 58 59 60
| CREATE FUNCTION FnTOTO
(
@n1 FLOAT,
@n2 FLOAT,
@n3 FLOAT,
@n4 FLOAT,
@n5 FLOAT,
@n6 FLOAT,
@n7 FLOAT,
@n8 FLOAT,
@n9 FLOAT,
@total FLOAT
)
RETURNS FLOAT
AS
BEGIN
DECLARE @result FLOAT
;WITH
-- Calcul des valeurs
DIV (val, ordre) AS
(
SELECT @n1 / @total, 1
UNION
SELECT @n2 / @total, 2
UNION
SELECT @n3 / @total, 3
UNION
SELECT @n4 / @total, 4
UNION
SELECT @n5 / @total, 5
UNION
SELECT @n5 / @total, 6
UNION
SELECT @n6 / @total, 7
UNION
SELECT @n7 / @total, 8
UNION
SELECT @n8 / @total, 9
),
-- Calcul des cumuls
CALC AS
(
SELECT val,
1 AS indice
FROM DIV
WHERE ordre = 1
UNION ALL
SELECT CALC.val + DIV.val,
indice + 1
FROM CALC
JOIN DIV ON DIV.ordre = CALC.indice + 1
)
-- Extraction de la plus petite valeur >= 0.5
SELECT TOP 1 @result = val
FROM CALC
WHERE val >= 0.5
RETURN @result
END |
Partager