Несколько столбцов в одном регистре в порядке по SQL Server 2016 - PullRequest
0 голосов
/ 06 октября 2018

Я написал запрос, в котором у меня есть условие для сортировки данных по нескольким столбцам в одном порядке, как показано ниже.

ORDER BY Column1 ASC, Column2 ASC, Column3 ASC

или

ORDER BY Column1 DESC, Column2 DESC, Column3 DESC

Я хочу написатьвышеуказанный вид сортировки в условном порядке по выражению, как показано ниже

ORDER BY 
    CASE WHEN @SortExpression = 'Id ASC' THEN Id END ASC,    
    CASE WHEN @SortExpression = 'Id DESC' THEN Id END DESC,    
    CASE WHEN @SortExpression = 'Status ASC' THEN Status END ASC,    
    CASE WHEN @SortExpression = 'Status DESC' THEN Status END DESC,   
    CASE WHEN @SortExpression = 'Country ASC' THEN Country Asc, City Asc, Zip Asc END,    
    CASE WHEN @SortExpression = 'Country DESC' THEN Country DESC, City DESC, Zip DESC END

, но приведенный выше запрос дает синтаксическую ошибку.Может ли кто-нибудь помочь мне найти решение моей проблемы?

Ответы [ 2 ]

0 голосов
/ 06 октября 2018

Ваше заявление должно быть переписано ниже, вы написали несколько столбцов после этого (THEN Country Asc, City Asc, Zip Asc END), что неверно

ORDER BY 
(CASE @SortExpression  when 'Id ASC'
 THEN Id End) ASC,    
(CASE @SortExpression WHEN 'Id DESC'
THEN Id END) DESC,    
(CASE @SortExpression 
WHEN 'Status ASC' 
THEN Status END ) ASC,    
(CASE @SortExpression WHEN 'Status DESC'
 THEN Status END) DESC,   
(CASE @SortExpression WHEN 'Country ASC' 
THEN Country end) Asc,
(CASE @SortExpression WHEN 'Country ASC' 
THEN City end) Asc,
(CASE @SortExpression WHEN 'Country ASC' 
THEN Zip end) Asc,         
( CASE @SortExpression  WHEN 'Country DESC'
THEN Country end ) DESC ,
( CASE @SortExpression  WHEN 'Country DESC'
THEN City end ) DESC,
( CASE @SortExpression  WHEN 'Country DESC'
THEN Zip end ) DESC
0 голосов
/ 06 октября 2018

Синтаксиса для CASE WHEN @SortExpression = 'Country ASC' THEN Country Asc, City Asc, Zip Asc END, нет, вам нужно писать пусть каждый ордер в CASE WHEN.

, если @SortExpression будет устанавливать только одно значение.если CASE WHEN не соответствует условию, будет возвращено NULL, тогда let выполнит только ваши ожидаемые столбцы заказа.

ORDER BY 
    CASE WHEN @SortExpression = 'Id ASC' THEN Id END ASC,    
    CASE WHEN @SortExpression = 'Id DESC' THEN Id END DESC,    
    CASE WHEN @SortExpression = 'Status ASC' THEN Status END ASC,    
    CASE WHEN @SortExpression = 'Status DESC' THEN Status END DESC,   
    CASE WHEN @SortExpression = 'Country ASC' THEN Country END Asc ,
    CASE WHEN @SortExpression = 'Country ASC' THEN City END Asc ,
    CASE WHEN @SortExpression = 'Country ASC' THEN Zip END Asc ,   
    CASE WHEN @SortExpression = 'Country DESC' THEN Country END DESC , 
    CASE WHEN @SortExpression = 'Country DESC' THEN City END DESC , 
    CASE WHEN @SortExpression = 'Country DESC' THEN Zip END DESC 
...