Подтвердить что ты не робот

MS Sql: Условный ORDER BY ASC/DESC Вопрос

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

Например:

SELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
4b9b3361

Ответ 1

Не меняйте ASC или DESC, измените знак сортируемой вещи:

SELECT * FROM table 
ORDER BY 
CASE WHEN @Direction = 1 THEN -id else id END asc;

OP спрашивает:

Ребята, я не эксперт SQL, пожалуйста, объясните мне, что означает id и -id, контролирует ли это направление заказа?

id - это все, что вы сортируете; -id - это просто отрицание этого, id * -1. Если вы сортируете более одного столбца, вам нужно будет отменить каждый столбец:

SELECT * FROM table 
ORDER BY 
CASE WHEN @Direction = 1 THEN -id else id END 
CASE WHEN @Direction = 1 THEN -othercolumn else othercolumn END ;

Если вы заказываете не числовым столбцом, вам нужно найти выражение, которое делает этот столбец "отрицательным"; писать функцию, которая может это сделать.

Ответ 2

SELECT * 
FROM Data 
ORDER BY 
Case WHEN @Direction = 1 THEN SortOrder END DESC, 
Case WHEN 1=1 THEN SortOrder END

Ответ 3

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

SELECT <column_list> FROM <table> ORDER BY CASE WHEN @sort_order = 'ASC' AND @sort_column = '<column>' THEN <column> END ASC, CASE WHEN @sort_order = 'DESC' AND @sort_column = '<column>' THEN <column> END DESC

Ответ 4

Я сделал что-то вроде этого

select productId, InventoryCount, 
    case 
    when @Direction = 1 then InventoryCount 
    else -InventoryCount 
    end as "SortOrder"
order by 3