Это, вероятно, сработает и, по сути, является быстрым обходным решением для того факта, что все выражения в операторе CASE
должны быть принудительно обработаны одновременно.
ALTER PROCEDURE GetEmployee
@SortOrder INT
AS
SELECT name,
AVG(salary) AS avgSalary,
COUNT(employeeID) AS employeeCount
FROM employee
ORDER BY CASE WHEN @SortOrder = 1 THEN AVG(salary) END,
CASE WHEN @SortOrder = 2 THEN COUNT(employeeID) END,
CASE WHEN @SortOrder NOT IN (1, 2) THEN name END