Основываясь на блестящей логике / коде от Mathematix и Scottyc, я представляю:
DECLARE @a INT, @b INT, @c INT = 0
WHILE @c < 100
BEGIN
SET @c += 1
SET @a = ROUND(RAND()*100,0)-50
SET @b = ROUND(RAND()*100,0)-50
SELECT @a AS a, @b AS b,
@a - ( ABS(@a-@b) + (@a-@b) ) / 2 AS MINab,
@a + ( ABS(@b-@a) + (@b-@a) ) / 2 AS MAXab,
CASE WHEN (@a <= @b AND @a = @a - ( ABS(@a-@b) + (@a-@b) ) / 2)
OR (@a >= @b AND @a = @a + ( ABS(@b-@a) + (@b-@a) ) / 2)
THEN 'Success' ELSE 'Failure' END AS Status
END
Хотя переход с функции scottyc на функцию MIN к функции MAX должен был быть для меня очевиден, этого не произошло, поэтому я решил это и включил здесь: SELECT @a + (ABS (@ b- @ a) + ( @ b- @ a)) / 2. Случайно сгенерированные числа, хотя и не являются доказательством, должны, по крайней мере, убедить скептиков в правильности обеих формул.