Я хочу сделать, чтобы сделать заказ в моем запросе условным, поэтому, если он удовлетворяет условию, его нужно упорядочить по убыванию
Например:
SELECT * FROM Data ORDER BY SortOrder CASE WHEN @Direction = 1 THEN DESC END
Ответ 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