当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)
@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有它的缺点,但我建议你至少尝试一下,如果它适合你.
归档时间: |
|
查看次数: |
23775 次 |
最近记录: |