ЗАКАЗАТЬ ПО СЛУЧАЮ с подзапросом - PullRequest
2 голосов
/ 04 февраля 2012

У меня проблема с заказом по динамическому значению при использовании AVG или COUNT с SQL Server. Как я могу заставить это работать?

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 avgSalary
              WHEN @SortOrder = 2 THEN employeeCount
              ELSE name
         END

1 Ответ

1 голос
/ 04 февраля 2012

Это, вероятно, сработает и, по сути, является быстрым обходным решением для того факта, что все выражения в операторе 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
...