Я пытаюсь сортировать по нескольким столбцам в SQL, и в разных направлениях. column1
будет отсортирован по убыванию и по column2
возрастанию.
Как я могу это сделать?
Я пытаюсь сортировать по нескольким столбцам в SQL, и в разных направлениях. column1
будет отсортирован по убыванию и по column2
возрастанию.
Как я могу это сделать?
Ответы:
ORDER BY column1 DESC, column2
Это сортирует все column1
сначала (по убыванию), а затем column2
(по возрастанию, что по умолчанию), когда column1
поля для двух или более строк равны.
column1
сначала, а затем по column2
каждому, когда column1
поля для двух строк равны.
column2
а затем выполняет СТАБИЛЬНУЮ сортировку column1
. Это более понятно для людей, которые знают, что такое стабильная сортировка.
В других ответах отсутствует конкретный пример, так что вот оно:
Учитывая следующие Человек таблицы:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
Thomas | More | 1478
Thomas | Jefferson | 1826
Если вы выполните запрос ниже:
SELECT * FROM People ORDER BY FirstName DESC, YearOfBirth ASC
Набор результатов будет выглядеть так:
FirstName | LastName | YearOfBirth
----------------------------------------
Thomas | More | 1478
Thomas | Jefferson | 1826
Thomas | Alva Edison | 1847
Benjamin | Franklin | 1706
1.Firstname asc, Lastname desc, yearOfBirst asc and 2.Firstname asc, Lastname desc, yearOfBirst desc
Есть ли способ, которым мы можем преодолеть это?
FirstName, LastName
записей с отличными друг от другаYearOfBirth
Порядок размещения нескольких столбцов зависит от соответствующих значений обоих столбцов: Вот мой пример таблицы, где два столбца имеют имена с алфавитами и числами, а значения в этих двух столбцах имеют порядки asc и desc .
Теперь я выполняю Order By в этих двух столбцах, выполнив следующую команду:
Теперь снова я вставляю новые значения в эти два столбца, где значение Alphabet в порядке ASC :
и столбцы в примере таблицы выглядят так. Теперь снова выполните ту же операцию:
Вы можете видеть, что значения в первом столбце расположены в порядке desc, но второй столбец не в порядке ASC.
(g, 10),(g,12)
. Затем, запустив свой запрос по порядку, вы получите второй столбец как ASC
заказ (это означаетg-10,g-11,g-12)
Вы можете использовать несколько заказов на несколько условий,
ORDER BY
(CASE
WHEN @AlphabetBy = 2 THEN [Drug Name]
END) ASC,
CASE
WHEN @TopBy = 1 THEN [Rx Count]
WHEN @TopBy = 2 THEN [Cost]
WHEN @TopBy = 3 THEN [Revenue]
END DESC