Поделиться через


Сортировка строк

Строки в результатах запроса можно сортировать. То есть можно указать конкретный столбец или набор столбцов, значениями которых определяется порядок строк в результирующем наборе.

Примечание

Порядок сортировки частично определяется параметрами сортировки столбца.Можно изменить порядок сортировки в Диалоговое окно "Параметры сортировки".

Существует несколько способов сортировки результатов запроса:

  • Можно упорядочивать строки по возрастанию или по убыванию   По умолчанию SQL использует столбцы, по которым ведется упорядочение, для расположения строк в возрастающем порядке. Например, чтобы упорядочить наименования книг в порядке возрастания цен, достаточно отсортировать строки по столбцу цен. Конечный код SQL может выглядеть следующим образом:

    SELECT *
    FROM titles
    ORDER BY price
    

    С другой стороны, если нужно сортировать названия книг так, чтобы в начале списка были расположены самые дорогие, можно явно указать порядок, в котором первым располагается элемент с самым высоким значением. То есть указать, что строки результата должны быть упорядочены по убыванию значений в столбце цен. Конечный код SQL может выглядеть следующим образом:

    SELECT *
    FROM titles
    ORDER BY price DESC
    
  • Можно сортировать по нескольким столбцам   Например, можно создать результирующий набор, содержащий по одной строке для каждого автора, упорядоченный сначала по штату, затем по городу. Конечный код SQL может выглядеть следующим образом:

    SELECT *
    FROM authors 
    ORDER BY state, city
    
  • Можно сортировать по столбцам, не отображаемым в наборе результатов   Например можно создать результирующий набор, в начале которого размещены самые дорогостоящие книги, хотя столбец цен при этом не отображается. Конечный код SQL может выглядеть следующим образом:

    SELECT title_id, title
    FROM titles
    ORDER BY price DESC
    
  • Можно сортировать по производным столбцам   Например, можно создать результирующий набор, каждая строка которого содержит наименование книги, причем первыми будут перечислены книги, авторы которых получают самый большой процент отчислений с проданного экземпляра. Конечный код SQL может выглядеть следующим образом:

    SELECT title, price * royalty / 100 as royalty_per_unit
    FROM titles
    ORDER BY royalty_per_unit DESC
    

    (Формула для вычисления авторского гонорара с проданного экземпляра каждой книги выделена).

    Чтобы вычислить производный столбец, можно использовать синтаксис SQL, как в предыдущем примере, или определяемую пользователем функцию, которая возвращает скалярное значение. Дополнительные сведения об определяемых пользователем функциях см. в документации по SQL Server.

  • Можно сортировать сгруппированные строки   Например, можно создать результирующий набор, в каждой строке которого описывается какой-либо город и указывается количество авторов из этого города, причем первыми перечисляются города с большим числом авторов. Конечный код SQL может выглядеть следующим образом:

    SELECT city, state, COUNT(*)
    FROM authors
    GROUP BY city, state
    ORDER BY COUNT(*) DESC, state 
    

    Обратите внимание на то, что в запросе используется state в качестве второстепенного столбца сортировки. Таким образом, если в двух штатах имеется одинаковое количество авторов, эти штаты располагаются в алфавитном порядке.

  • Можно сортировать с использованием данных в разных языковых форматах   То есть можно сортировать столбец, используя соглашения о порядке сортировки, отличные от соглашений по умолчанию, применяемых для этого столбца. Например, можно составить запрос, получающий наименования всех книг, автором которых является Jaime Patiño. Чтобы отобразить наименования в алфавитном порядке, для столбца наименований используется испанская схема упорядочения. Конечный код SQL может выглядеть следующим образом:

    SELECT title
    FROM 
        authors 
        INNER JOIN 
            titleauthor 
            ON authors.au_id 
            =  titleauthor.au_id 
            INNER JOIN
                titles 
                ON titleauthor.title_id 
                =  titles.title_id 
    WHERE 
         au_fname = 'Jaime' AND 
         au_lname = 'Patiño'
    ORDER BY 
         title COLLATE SQL_Spanish_Pref_CP1_CI_AS
    

Дополнительные сведения см. в разделе Практическое руководство: использование конструктора запросов и представлений с данными в международном формате. Дополнительные сведения о результатах сортировки см. в разделе Сортировка и группировка результатов запроса.

См. также

Другие ресурсы

Сортировка и группировка результатов запроса

Конструирование запросов и представлений