Бөлісу құралы:


SELECT — предложение ORDER BY (Transact-SQL)

Применимо к:SQL ServerБаза данных Azure SQLУправляемый экземпляр Azure SQLAzure Synapse AnalyticsСистема платформы аналитики (PDW)Конечная точка SQL аналитики в Microsoft FabricХранилище в Microsoft FabricБаза данных SQL в Microsoft Fabric

Сортирует данные, возвращенные запросом в SQL Server. Это предложение используется для следующих целей:

  • Упорядочение результирующего набора запроса по заданному списку столбцов и (дополнительно) ограничение числа возвращаемых строк указанным диапазоном. Порядок возврата строк в результирующем ORDER BY наборе не гарантируется, если предложение не указано.

  • Определение порядка, в котором значения ранжирующей функции применяются к результирующему набору.

Соглашения о синтаксисе Transact-SQL

Note

ORDER BY не поддерживается в инструкциях CTAS в SELECT/INTOCREATE TABLE AS SELECT Azure Synapse Analytics или Analytics Platform System (PDW).

Syntax

Синтаксис ДЛЯ SQL Server и База данных SQL Azure.

ORDER BY order_by_expression
    [ COLLATE collation_name ]
    [ ASC | DESC ]
    [ , ...n ]
[ <offset_fetch> ]

<offset_fetch> ::=
{
    OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }
    [
      FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY
    ]
}

Синтаксис для системы платформы Azure Synapse Analytics и Analytics (PDW):

[ ORDER BY
    {
    order_by_expression
    [ ASC | DESC ]
    } [ , ...n ]
]

Arguments

order_by_expression

Указывает столбец или выражение, по которому производится сортировка результирующего набора запроса. Можно указать столбец сортировки в качестве псевдонима имени или столбца или как неотрицательное целое число, представляющее позицию столбца в списке выбора.

Можно указать несколько столбцов сортировки. Имена столбцов должны быть уникальными. Последовательность столбцов сортировки в ORDER BY предложении определяет организацию отсортированного результирующего набора. Результирующий набор сортируется по первому столбцу, а затем упорядоченный список сортируется по второму столбцу и т. д.

Имена столбцов, на которые ссылается ORDER BY предложение, должны соответствовать псевдониму столбца или столбца в списке выбора или столбцу, определенному в таблице, указанной в FROM предложении, без каких-либо неоднозначности. ORDER BY Если предложение ссылается на псевдоним столбца из списка выбора, используйте псевдоним столбца самостоятельно. Не используйте псевдоним столбца как часть выражения в предложении ORDER BY .

Рассмотрим пример.

  • Правильное использование:

    SELECT SCHEMA_NAME(schema_id) AS SchemaName
    FROM sys.objects
    ORDER BY SchemaName; -- correct
    
  • Неправильное использование:

    SELECT SCHEMA_NAME(schema_id) AS SchemaName
    FROM sys.objects
    ORDER BY SchemaName + ''; -- wrong
    

СОПОСТАВИТЬ collation_name

Указывает, что ORDER BY операция должна выполняться в соответствии с параметрами сортировки, указанными в collation_name, а не в соответствии с параметрами сортировки столбца, как определено в таблице или представлении. Collation_name может быть именем сортировки Windows или именем сортировки SQL. Дополнительные сведения см. в разделе о поддержке сортировки и Юникода. COLLATEприменимо только для столбцов типа char, varchar, nchar и nvarchar.

ASC | DESC

Указывает порядок сортировки значений в указанном столбце — по возрастанию или по убыванию. Значение ASC сортирует от низких значений к высоким. Значение DESC сортирует от высоких значений к низким. Порядок сортировки по умолчанию — ASC. NULL Значения обрабатываются как наименьшие возможные значения.

OFFSET { integer_constant offset_row_count_expression | } { ROW | ROWS }

Область применения: SQL Server 2012 (11.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL Azure.

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

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

ROW и ROWS являются синонимами и предоставляются для совместимости ANSI.

В планах выполнения запросов значение счетчика строк смещения отображается в атрибуте TOPOffset оператора запроса.

FETCH { FIRST | NEXT } { integer_constant fetch_row_count_expression | } { ROW | ТОЛЬКО ROWS }

Область применения: SQL Server 2012 (11.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL Azure.

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

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

FIRST и NEXT являются синонимами и предоставляются для совместимости ANSI.

ROW и ROWS являются синонимами и предоставляются для совместимости ANSI.

В планах выполнения запросов значение счетчика строк смещения отображается в атрибутеTOP Rows или Top оператора запроса.

Лучшие практики

Избегайте указания целых чисел в предложении в ORDER BY качестве позиционных представлений столбцов в списке выбора. Например, хотя оператор SELECT ProductID, Name FROM Production.Production ORDER BY 2 является допустимым, пользователи могут найти его трудно понять по сравнению с указанием фактического имени столбца. Кроме того, изменения в списке выбора, такие как изменение порядка столбцов или добавление новых столбцов, требуют изменения ORDER BY предложения, чтобы избежать непредвиденных результатов.

В инструкции SELECT TOP (<n>) всегда используйте ORDER BY предложение. Это единственный способ прогнозировать, какие строки TOP влияют. Дополнительные сведения см. в разделе TOP.

Interoperability

При использовании ORDER BY с оператором SELECT...INTO или INSERT...SELECT инструкцией для вставки строк из другого источника предложение не гарантирует вставку ORDER BY строк в указанном порядке.

Использование OFFSET и FETCH в представлении не изменяет свойство возможности обновления представления.

Limitations

Количество столбцов в ORDER BY предложении не ограничено. Однако общий размер столбцов, указанных в ORDER BY предложении, не может превышать 8060 байт.

Нельзя использовать столбцы типа ntext, text, image, geography, geometry или xml в предложении ORDER BY .

Невозможно указать целое число или константу, если order_by_expression отображается в функции ранжирования. Дополнительные сведения см. в предложении SELECT - OVER.

Если вы псевдонимируете имя таблицы в FROM предложении, необходимо использовать имя псевдонима для указания его столбцов в предложении ORDER BY .

SELECT Если инструкция содержит одно из следующих предложений или операторов, необходимо определить имена столбцов и псевдонимы, указанные в предложении в ORDER BY списке выбора:

  • Оператор UNION
  • Оператор EXCEPT
  • Оператор INTERSECT
  • SELECT DISTINCT

Кроме того, если инструкция включает UNIONEXCEPTоператор или INTERSECT оператор, список выбора первого (левого) запроса должен указывать имена столбцов или псевдонимы столбцов.

В запросе, EXCEPTиспользующего UNIONоператоры или INTERSECT операторы, можно использовать ORDER BY только в конце инструкции. Это ограничение применяется только при указании UNION, EXCEPTа также в запросе верхнего уровня, а INTERSECT не в вложенных запросах. См. раздел "Примеры".

Предложение ORDER BY не является допустимым в представлениях, встроенных функциях, производных таблицах и вложенных запросах, если вы также не указываете TOP или OFFSETFETCH иные предложения. При использовании ORDER BY в этих объектах предложение используется только для определения строк, возвращаемых предложением TOP или OFFSETFETCH предложениями. Предложение ORDER BY не гарантирует упорядоченные результаты при запросе этих конструкций, если ORDER BY в самом запросе не указано.

OFFSET и FETCH не поддерживаются в индексированных представлениях или в представлении, определяемом CHECK OPTION с помощью предложения.

OFFSET и FETCH его можно использовать в любом запросе, который позволяет TOP и ORDER BY с помощью следующих ограничений:

  • Предложение OVER не поддерживает OFFSET и FETCH.

  • Невозможно указать OFFSET и FETCH напрямую в INSERTоператорах , MERGEUPDATEа DELETE также инструкции, но их можно указать в вложенных запросах, определенных в этих инструкциях. Например, в инструкции INSERT INTO SELECT можно указать OFFSET и FETCH в инструкции SELECT .

  • В запросе, использующего EXCEPTUNIONоператоры или INTERSECT операторы, можно указать OFFSETFETCHтолько окончательный запрос, указывающий порядок результатов запроса.

  • Невозможно объединить TOP с OFFSET и FETCH в одном выражении запроса (в той же области запроса).

Использование OFFSET и FETCH для ограничения возвращаемых строк

OFFSET Используйте предложения вместо FETCH предложенияTOP, чтобы реализовать решение по страницам запросов и ограничить количество строк, отправленных клиентскому приложению.

Для использования OFFSET и FETCH в качестве решения для разбиения на страницы требуется выполнение запроса по одному разу для каждой страницы данных, возвращаемых клиентскому приложению. Например, чтобы вернуть результаты запроса в 10 строк, необходимо выполнить запрос один раз, чтобы вернуть строки 1–10, а затем снова запустить запрос, чтобы вернуть строки 11–20 и т. д. Каждый запрос выполняется независимо и никаким образом не связан с другими запросами. Это означает, что в отличие от курсора, в котором выполняется запрос один раз и состояние сохраняется на сервере, клиентское приложение отвечает за отслеживание состояния. Чтобы достичь стабильных результатов между запросами с помощью OFFSETFETCHи следующими условиями, необходимо выполнить следующие условия:

  1. Базовые данные, которые использует запрос, не изменяются. То есть запрос не обновляет строки или все запросы на страницы из запроса выполняются в одной транзакции с помощью изоляции моментальных снимков или сериализуемых транзакций. Дополнительные сведения об этих уровнях изоляции транзакций см. в разделе SET TRANSACTION ISOLATION LEVEL.

  2. Предложение ORDER BY содержит столбец или сочетание столбцов, которые гарантированно будут уникальными.

См. пример выполнения нескольких запросов в одной транзакции в разделе "Примеры ".

Если согласованные планы выполнения важны в решении по страницам, рассмотрите возможность использования OPTIMIZE FOR указания запроса для OFFSET параметров и FETCH параметров. См. раздел "Указание выражений" для значений OFFSET и FETCH в разделе "Примеры ". Дополнительные сведения см. в OPTIMIZE FORразделе "Подсказки запросов".

Examples

Примеры кода в этой статье используют базу данных образца AdventureWorks2025 или AdventureWorksDW2025, которую можно скачать с домашней страницы образцов и проектов сообщества Microsoft SQL Server и.

Category Используемые элементы синтаксиса
Базовый синтаксис ORDER BY
Укажите порядок возрастания и убывания DESC или ASC
Указание параметров сортировки COLLATE
Указание условного порядка Выражение CASE
Использование ORDER BY в функции ранжирования Ранжирующие функции
Ограничение количества возвращаемых строк OFFSET и FETCH.
Использование ORDER BY с UNION, EXCEPT и INTERSECT UNION

Основной синтаксис

Примеры в этом разделе демонстрируют основные функциональные возможности ORDER BY предложения с помощью минимального обязательного синтаксиса.

A. Указание одного столбца, определенного в списке выбора

В следующем примере производится упорядочение результирующего набора по числовому столбцу ProductID. Так как порядок сортировки не указан, запрос использует порядок возрастания по умолчанию.

USE AdventureWorks2025;
GO

SELECT ProductID,
       Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID;

B. Укажите столбец, который не определен в списке выбора

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

USE AdventureWorks2025;
GO

SELECT ProductID,
       Name,
       Color
FROM Production.Product
ORDER BY ListPrice;

C. Укажите псевдоним в качестве столбца сортировки

В следующем примере в качестве столбца сортировки указывается псевдоним столбца SchemaName.

USE AdventureWorks2025;
GO

SELECT name,
       SCHEMA_NAME(schema_id) AS SchemaName
FROM sys.objects
WHERE type = 'U'
ORDER BY SchemaName;

D. Указание выражения в качестве столбца сортировки

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

USE AdventureWorks2025;
GO

SELECT BusinessEntityID,
       JobTitle,
       HireDate
FROM HumanResources.Employee
ORDER BY DATEPART(year, HireDate);

Указание порядка сортировки по возрастанию и убыванию

A. Указание порядка убывания

В следующем примере производится упорядочение результирующего набора по числовому столбцу ProductID в убывающем порядке.

USE AdventureWorks2025;
GO

SELECT ProductID,
       Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY ProductID DESC;

B. Укажите порядок возрастания

В следующем примере производится упорядочение результирующего набора по столбцу Name в возрастающем порядке. Символьные значения сортируются в алфавитном порядке, а не в числовом. Иными словами, отсортированное значение 10 находится перед 2.

USE AdventureWorks2025;
GO

SELECT ProductID,
       Name
FROM Production.Product
WHERE Name LIKE 'Lock Washer%'
ORDER BY Name ASC;

C. Укажите порядок возрастания и убывания

В следующем примере производится упорядочение результирующего набора по двум столбцам. Результирующий набор запроса сначала сортируется по возрастанию по столбцу FirstName, а затем в убывающем порядке по столбцу LastName.

USE AdventureWorks2025;
GO

SELECT LastName,
       FirstName
FROM Person.Person
WHERE LastName LIKE 'R%'
ORDER BY FirstName ASC, LastName DESC;

Указание параметров сортировки

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

USE tempdb;
GO

CREATE TABLE #t1
(
    name NVARCHAR (15) COLLATE Latin1_General_CI_AI
);

INSERT INTO #t1
VALUES (N'Sánchez'),
       (N'Sanchez'),
       (N'sánchez'),
       (N'sanchez');

-- This query uses the collation specified for the column 'name' for sorting.
SELECT name
FROM #t1
ORDER BY name;

-- This query uses the collation specified in the ORDER BY clause for sorting.
SELECT name
FROM #t1
ORDER BY name COLLATE Latin1_General_CS_AS;

Указание условного порядка

В следующих примерах выражение в CASE предложении используется ORDER BY для условного определения порядка сортировки строк на основе заданного значения столбца. В первом примере вычисляется значение столбца SalariedFlag таблицы HumanResources.Employee. Сотрудники, для которых столбец SalariedFlag имеет значение 1, возвращаются в порядке BusinessEntityID (по убыванию). Сотрудники, для которых столбец SalariedFlag имеет значение 0, возвращаются в порядке BusinessEntityID (по возрастанию). Во втором примере результирующий набор упорядочивается по столбцу TerritoryName, если столбец CountryRegionName содержит значение «США», и по столбцу CountryRegionName в остальных строках.

SELECT BusinessEntityID,
       SalariedFlag
FROM HumanResources.Employee
ORDER BY
    CASE SalariedFlag
        WHEN 1 THEN BusinessEntityID
    END DESC,
    CASE
        WHEN SalariedFlag = 0 THEN BusinessEntityID
    END;
SELECT BusinessEntityID,
       LastName,
       TerritoryName,
       CountryRegionName
FROM Sales.vSalesPerson
WHERE TerritoryName IS NOT NULL
ORDER BY
    CASE CountryRegionName
        WHEN 'United States' THEN TerritoryName ELSE CountryRegionName
    END;

Использование ORDER BY в функции ранжирования

В следующем примере используется ORDER BY предложение в функциях ROW_NUMBERранжирования , RANKи DENSE_RANKNTILE.

USE AdventureWorks2025;
GO

SELECT p.FirstName,
       p.LastName,
       ROW_NUMBER() OVER (ORDER BY a.PostalCode) AS "Row Number",
       RANK() OVER (ORDER BY a.PostalCode) AS "Rank",
       DENSE_RANK() OVER (ORDER BY a.PostalCode) AS "Dense Rank",
       NTILE(4) OVER (ORDER BY a.PostalCode) AS "Quartile",
       s.SalesYTD,
       a.PostalCode
FROM Sales.SalesPerson AS s
     INNER JOIN Person.Person AS p
         ON s.BusinessEntityID = p.BusinessEntityID
     INNER JOIN Person.Address AS a
         ON a.AddressID = p.BusinessEntityID
WHERE TerritoryID IS NOT NULL
      AND SalesYTD <> 0;

Ограничение количества возвращаемых строк

Область применения: SQL Server 2012 (11.x) и более поздних версий, База данных SQL Azure и Управляемый экземпляр SQL Azure.

В следующих примерах используется OFFSET и FETCH ограничивается количество строк, возвращаемых запросом.

A. Указание целых констант для значений OFFSET и FETCH

В следующем примере указывается целочисленная константа в качестве значения для OFFSET предложений и FETCH предложений. Первый запрос возвращает все строки, отсортированные по столбцу DepartmentID. Сравните результаты, возвращенные этим запросом, с результатами двух следующих запросов. Следующий запрос использует предложение OFFSET 5 ROWS , чтобы пропустить первые пять строк и вернуть все оставшиеся строки. Конечный запрос содержит предложение OFFSET 0 ROWS, чтобы начать с первой строки, а затем предложение FETCH NEXT 10 ROWS ONLY, ограничивающее число возвращаемых строк до 10 из сортированного результирующего набора.

USE AdventureWorks2025;
GO

-- Return all rows sorted by the column DepartmentID.
SELECT DepartmentID,
       Name,
       GroupName
FROM HumanResources.Department
ORDER BY DepartmentID;

-- Skip the first 5 rows from the sorted result set and return all remaining rows.
SELECT DepartmentID,
       Name,
       GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 5 ROWS;

-- Skip 0 rows and return only the first 10 rows from the sorted result set.
SELECT DepartmentID,
       Name,
       GroupName
FROM HumanResources.Department
ORDER BY DepartmentID OFFSET 0 ROWS
FETCH NEXT 10 ROWS ONLY;

B. Указание переменных для значений OFFSET и FETCH

В следующем примере объявляют переменные и @RowsToSkip указываются эти переменные @FetchRows в OFFSET предложениях и FETCH предложениях.

USE AdventureWorks2025;
GO

-- Specifying variables for OFFSET and FETCH values
DECLARE @RowsToSkip AS TINYINT = 2,
        @FetchRows AS TINYINT = 8;

SELECT DepartmentID,
       Name,
       GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @RowsToSkip ROWS
FETCH NEXT @FetchRows ROWS ONLY;

C. Указание выражений для значений OFFSET и FETCH

В следующем примере выражение @StartingRowNumber - 1 используется для указания OFFSET значения и выражения @EndingRowNumber - @StartingRowNumber + 1 для указания FETCH значения. Кроме того, указывается указание OPTIMIZE FORзапроса. Используйте это указание, чтобы указать определенное значение для локальной переменной при компиляции и оптимизации запроса. Значение используется только в процессе оптимизации запроса, но не в процессе выполнения. Дополнительные сведения см. в указаниях запросов.

USE AdventureWorks2025;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE @StartingRowNumber AS TINYINT = 1,
        @EndingRowNumber AS TINYINT = 8;

SELECT DepartmentID,
       Name,
       GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
FETCH NEXT @EndingRowNumber - @StartingRowNumber + 1 ROWS ONLY
OPTION (OPTIMIZE FOR (@StartingRowNumber = 1, @EndingRowNumber = 20));

D. Указание скалярного запроса констант для значений OFFSET и FETCH

В следующем примере используется константный скалярный вложенный запрос для определения значения предложения FETCH . Вложенный запрос возвращает единственное значение из столбца PageSize в таблице dbo.AppSettings.

-- Specifying a constant scalar subquery
USE AdventureWorks2025;
GO

CREATE TABLE dbo.AppSettings
(
    AppSettingID INT NOT NULL,
    PageSize INT NOT NULL
);

INSERT INTO dbo.AppSettings
VALUES (1, 10);

DECLARE @StartingRowNumber AS TINYINT = 1;

SELECT DepartmentID,
       Name,
       GroupName
FROM HumanResources.Department
ORDER BY DepartmentID ASC
OFFSET @StartingRowNumber ROWS
FETCH NEXT (SELECT PageSize
            FROM dbo.AppSettings
            WHERE AppSettingID = 1) ROWS ONLY;

E. Выполнение нескольких запросов в одной транзакции

В следующем примере показан один из методов реализации решения разбиения на страницы, который обеспечивает стабильные результаты, возвращаемые во всех запросах. Запрос выполняется в одной транзакции с помощью уровня изоляции моментального снимка, а столбец, указанный в ORDER BY предложении, гарантирует уникальность столбца.

USE AdventureWorks2025;
GO

-- Ensure the database can support the snapshot isolation level set for the query.
IF (SELECT snapshot_isolation_state
    FROM sys.databases
    WHERE name = N'AdventureWorks2025') = 0
ALTER DATABASE AdventureWorks2025
SET ALLOW_SNAPSHOT_ISOLATION ON;

-- Set the transaction isolation level to SNAPSHOT for this query.
SET TRANSACTION ISOLATION LEVEL SNAPSHOT;

-- Beginning the transaction.
BEGIN TRANSACTION;

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE @StartingRowNumber AS INT = 1,
        @RowCountPerPage AS INT = 3;

-- Create the condition to stop the transaction after all rows have been returned.
WHILE (SELECT COUNT(*)
       FROM HumanResources.Department) >= @StartingRowNumber
    BEGIN
         -- Run the query until the stop condition is met.
        SELECT DepartmentID,
               Name,
               GroupName
        FROM HumanResources.Department
        ORDER BY DepartmentID ASC OFFSET @StartingRowNumber - 1 ROWS
        FETCH NEXT @RowCountPerPage ROWS ONLY;

        -- Increment @StartingRowNumber value.
        SET @StartingRowNumber = @StartingRowNumber + @RowCountPerPage;
        CONTINUE;
    END
COMMIT TRANSACTION;

Использование ORDER BY с UNION, EXCEPT и INTERSECT

Если запрос использует UNIONоператоры или EXCEPTINTERSECT операторы, укажите ORDER BY предложение в конце инструкции. Запрос сортирует результаты объединенных запросов. В следующем примере возвращаются все продукты желтого или красного цвета, отсортированные в общем списке по столбцу ListPrice.

USE AdventureWorks2025;
GO

SELECT Name,
       Color,
       ListPrice
FROM Production.Product
WHERE Color = 'Red' -- ORDER BY cannot be specified here.
UNION ALL
SELECT Name,
       Color,
       ListPrice
FROM Production.Product
WHERE Color = 'Yellow'
ORDER BY ListPrice ASC;

Примеры: Azure Synapse Analytics и система платформы аналитики (PDW)

В следующем примере демонстрируется упорядочение результирующего набора по числовому столбцу EmployeeKey в возрастающем порядке.

-- Uses AdventureWorks
SELECT EmployeeKey,
       FirstName,
       LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey;

В следующем примере производится упорядочение результирующего набора по числовому столбцу EmployeeKey в убывающем порядке.

-- Uses AdventureWorks
SELECT EmployeeKey,
       FirstName,
       LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY EmployeeKey DESC;

В следующем примере производится упорядочение результирующего набора по столбцу LastName.

-- Uses AdventureWorks
SELECT EmployeeKey,
       FirstName,
       LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName;

В следующем примере производится упорядочение по двум столбцам. Этот запрос сначала сортирует в возрастающем порядке по столбцу FirstName, а затем сортирует общие значения FirstName в убывающем порядке по столбцу LastName.

-- Uses AdventureWorks
SELECT EmployeeKey,
       FirstName,
       LastName
FROM DimEmployee
WHERE LastName LIKE 'A%'
ORDER BY LastName, FirstName;