【问题标题】:ORDER BY CASE with a subquery带有子查询的 ORDER BY CASE
【发布时间】:2012-02-04 10:28:40
【问题描述】:

当我将 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

【问题讨论】:

    标签: sql-server sql-server-2008 subquery sql-order-by


    【解决方案1】:

    这可能会起作用,并且基本上是一个快速的解决方法,因为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
    

    【讨论】:

    • 好的,太好了!有没有办法添加 DESC 或 ASC?
    • @Nicklas AVG(salary) END DESC, ... COUNT(employeeID) END ASC, ...
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    相关资源
    最近更新 更多