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