Переменные в Python неизменяемы, что означает, что они не изменяются со временем или не могут быть изменены, если не будут упомянуты что-то другое. Другими словами, использование доступных типов данных невозможно. Существует причина, по которой Python - это увеличение скорости и выразительности. Вероятно, есть способ реализовать то, что вы хотите сделать, без изменяемого типа данных.
Если вы настаиваете на использовании изменяемого типа данных, есть языки, которые разрешают это, и может быть импортируемый модуль или определение класса который позволяет это, но он очень непитонический.
См.: https://mail.python.org/pipermail/tutor/2000-August/001976.html
Не изменяйте ASC
или DESC
, меняйте знак сортируемой вещи:
SELECT * FROM table
ORDER BY
CASE WHEN @Direction = 1 THEN -id else id END asc;
ОП спрашивает:
Ребята, я не эксперт по 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 ;
Если вы упорядочиваете по нечисловому столбцу, вам нужно найти выражение, которое делает этот столбец «отрицательным»; написание функции для этого может помочь.
SELECT *
FROM Data
ORDER BY
Case WHEN @Direction = 1 THEN SortOrder END DESC,
Case WHEN 1=1 THEN SortOrder END
Вы также можете использовать схему, которая поддерживает все типы столбцов:
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
Я сделал что-то подобное
select productId, InventoryCount,
case
when @Direction = 1 then InventoryCount
else -InventoryCount
end as "SortOrder"
order by 3