Если я полностью не упустил смысл того, чего вы пытаетесь достичь, разве вы просто не хотите это сделать?
DECLARE @firstNum INT, @secondNum INT, @thirdNum INT, @evenSum INT
SET @firstNum = 1
SET @secondNum = 2
set @thirdNum = 2
SET @evenSum = 2
WHILE (@thirdNum <= 4000000)
BEGIN
SET @thirdNum = @firstNum + @secondNum
SET @firstNum = @secondNum
SET @secondNum = @thirdNum
IF (@thirdNum % 2) = 0
SET @evenSum += @thirdNum
END
PRINT 'Answer = ' + CONVERT(VARCHAR, @evenSum)
Что вы пытались сделать с помощью 'ORDER BY 'не сработало, потому что вы не имеете дело с набором данных, вам нечего "упорядочить" - у вас есть некоторые переменные и вы выполняете некоторые вычисления в них oop до тех пор, пока не будет выполнено определенное условие - вы хотел узнать, каково значение @evensum, когда l oop завершил свою последнюю итерацию. Поэтому все, что вам нужно было сделать, это дождаться, пока код выпадет из l oop, и вывести значение.