SQL несколько столбцов - PullRequest
564 голосов
/ 12 января 2010

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

Как я могу это сделать?

Ответы [ 5 ]

908 голосов
/ 12 января 2010
ORDER BY column1 DESC, column2

При этом все сначала сортируется по column1 (по убыванию), а затем по column2 (по умолчанию), когда поля column1 для двух или более строк равны.

318 голосов
/ 19 января 2014

В других ответах отсутствует конкретный пример, поэтому здесь это так:

С учетом следующей таблицы People :

 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
129 голосов
/ 12 января 2010
SELECT  *
FROM    mytable
ORDER BY
        column1 DESC, column2 ASC
13 голосов
/ 08 декабря 2016

Порядок нескольких столбцов зависит от соответствующих значений обоих столбцов: Вот мой пример таблицы, где два столбца имеют имена с алфавитами и числами, а значения в этих двух столбцах: asc и desc orders.

enter image description here

Теперь я выполняю Порядок в этих двух столбцах, выполнив следующую команду:

enter image description here

Теперь я снова вставляю новые значения в эти два столбца, где значение алфавита в ASC порядок:

enter image description here

и столбцы в таблице примеров выглядят следующим образом. Теперь снова выполните ту же операцию:

enter image description here

Можно видеть, что значения в первом столбце расположены в порядке desc, но второй столбец не в порядке ASC.

4 голосов
/ 03 февраля 2017

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

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 
...