具有多列的SELECT动态排序

Bra*_*adB 23 sql sql-server

当ORDER BY基于CASE语句时,选择多个ORDER BY列的正确MS SQL语法是什么?

以下单列工作正常,但我需要按多列排序:

SELECT * FROM Products
ORDER BY 
CASE WHEN @SortIndex = 1 THEN Price END ASC,
CASE WHEN @SortIndex = 2 THEN Price DESC, Title ASC END <-- problem line
Run Code Online (Sandbox Code Playgroud)

Asi*_*lla 41

你可以试试这个

SELECT * FROM Products
ORDER BY 
CASE WHEN @SortIndex = 1 THEN Price END ASC,
CASE WHEN @SortIndex = 2 THEN Price END DESC, 
CASE WHEN @SortIndex = 2 THEN Title END ASC 
Run Code Online (Sandbox Code Playgroud)


Sad*_*hir 6

@Brad.帕维尔建议如下(我认为),

DECLARE @query VARCHAR(MAX)

SET @query = 'SELECT * FROM Products 
              ORDER BY  
              '

IF (@SortIndex = 1) 
    SET @query =@query  + ' Price ASC '
ELSE IF (@SortIndex = 2) 
    SET @query =@query  + ' Price DESC, Title ASC '

sp_executesql @query
Run Code Online (Sandbox Code Playgroud)

为什么你认为动态sql不适合复杂的存储过程?这些正是您应该使用动态SQL的地方,因为它可以帮助降低复杂性并解决参数嗅探等问题.我同意动态sql有它的缺点,但我建议你至少尝试一下,如果它适合你.