Compartir vía


SELECT : cláusula ORDER BY (Transact-SQL)

Se aplica a: SQL Server Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Analytics Platform System (PDW) Punto de conexión de análisis SQL en Microsoft Fabric Almacenamiento en Microsoft Fabric

Ordena los datos devueltos por una consulta en SQL Server. Use esta cláusula para lo siguiente:

  • Ordenar el conjunto de resultados de una consulta por la lista de columnas especificada y, opcionalmente, limitar las filas devueltas a un intervalo especificado. El orden en el que se devuelven filas en un conjunto de resultados no se garantiza a menos que se especifique una ORDER BY cláusula .

  • Determinar el orden en que se aplican los valores de la función de categoría al conjunto de resultados.

Convenciones de sintaxis de Transact-SQL

Nota:

ORDER BY no se admite en SELECT/INTO instrucciones ni CREATE TABLE AS SELECT (CTAS) en Azure Synapse Analytics o Analytics Platform System (PDW).

Sintaxis

Sintaxis para SQL Server y Azure SQL Database.

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
    ]
}

Sintaxis para Azure Synapse Analytics y Almacenamiento de datos paralelos.

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

Nota:

Para ver la sintaxis de Transact-SQL para SQL Server 2014 (12.x) y versiones anteriores, consulte Versiones anteriores de la documentación.

Argumentos

order_by_expression

Especifica una columna o expresión según la que se ordenará el conjunto de resultados de la consulta. Se puede especificar una columna de ordenación como un alias de nombre o columna, o un entero no negativo que representa la posición de la columna en la lista de selección.

Es posible especificar varias columnas de ordenación. Los nombres de columna tienen que ser únicos. La secuencia de las columnas de ordenación de la ORDER BY cláusula define la organización del conjunto de resultados ordenado. Es decir, el conjunto de resultados se ordena conforme a la primera columna y, a continuación, esa lista ordenada se ordena según la segunda columna, y así sucesivamente.

Los nombres de columna a los que se hace referencia en la ORDER BY cláusula deben corresponder a un alias de columna o columna en la lista de selección o a una columna definida en una tabla especificada en la FROM cláusula sin ambigüedades. Si la ORDER BY cláusula hace referencia a un alias de columna de la lista de selección, el alias de columna debe usarse por sí mismo y no como parte de alguna expresión en ORDER BY la cláusula , por ejemplo:

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

COLLATE collation_name

Especifica que la ORDER BY operación debe realizarse según la intercalación especificada en collation_name y no según la intercalación de la columna tal como se define en la tabla o vista. El collation_name puede ser un nombre de intercalación de Windows o un nombre de intercalación de SQL. Para obtener más información, consulte Soporte técnico de intercalación y Unicode. COLLATE solo es aplicable a las columnas de tipo char, varchar, nchar y nvarchar.

ASC | DESC

Indica que los valores de la columna especificada se deben ordenar en sentido ascendente o descendente. ASC ordena del valor mínimo al valor máximo. DESC ordena del valor máximo al valor mínimo. ASC es el criterio de ordenación predeterminado. Los valores NULL se tratan como los valores más bajos posibles.

OFFSET { integer_constant | offset_row_count_expression } { ROW | ROWS }

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores, Azure SQL Database y Azure SQL Instancia administrada.

Especifica el número de filas que se deben omitir antes de comenzar a devolver filas de la expresión de consulta. El valor puede ser una expresión o constante entera mayor o igual que cero.

offset_row_count_expression puede ser una variable, un parámetro o una subconsulta escalar constante. Cuando se usa una subconsulta, no puede hacer referencia a ninguna columna definida en el ámbito de consulta externa. Es decir, no se puede correlacionar con la consulta externa.

ROW y ROWS son sinónimos y se proporcionan para la compatibilidad con ANSI.

En los planes de ejecución de consultas, el valor de recuento de filas de desplazamiento se muestra en el atributo Offset del TOP operador de consulta.

FETCH { FIRST | NEXT } { integer_constant | fetch_row_count_expression } { ROW | ROWS } ONLY

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores, Azure SQL Database y Azure SQL Instancia administrada.

Especifica el número de filas que se van a devolver una vez procesada la OFFSET cláusula . El valor puede ser una expresión o constante entera mayor o igual que uno.

fetch_row_count_expression puede ser una variable, un parámetro o una subconsulta escalar constante. Cuando se usa una subconsulta, no puede hacer referencia a ninguna columna definida en el ámbito de consulta externa. Es decir, no se puede correlacionar con la consulta externa.

FIRST y NEXT son sinónimos y se proporcionan para la compatibilidad con ANSI.

ROW y ROWS son sinónimos y se proporcionan para la compatibilidad con ANSI.

En los planes de ejecución de consultas, el valor de recuento de filas de desplazamiento se muestra en el atributo Rows o Top del TOP operador de consulta.

procedimientos recomendados

Evite especificar enteros en la ORDER BY cláusula como representaciones posicionales de las columnas de la lista de selección. Por ejemplo, aunque una instrucción como SELECT ProductID, Name FROM Production.Production ORDER BY 2 es válida, la instrucción no se entiende tan fácilmente por otros en comparación con la especificación del nombre de columna real. Además, los cambios en la lista de selección, como cambiar el orden de columna o agregar nuevas columnas, requieren modificar la ORDER BY cláusula para evitar resultados inesperados.

En una SELECT TOP (<n>) instrucción , use siempre una ORDER BY cláusula . Esta es la única manera de indicar de forma predecible qué filas se ven afectadas por TOP. Para obtener más información, vea TOP.

Interoperabilidad

Cuando se usa con una SELECT...INTO instrucción o INSERT...SELECT para insertar filas de otro origen, la ORDER BY cláusula no garantiza que las filas se inserte en el orden especificado.

El uso OFFSET y FETCH en una vista no cambia la propiedad updateability de la vista.

Limitaciones

No hay límite para el número de columnas de la ORDER BY cláusula . Sin embargo, el tamaño total de las columnas especificadas en una ORDER BY cláusula no puede superar los 8060 bytes.

Las columnas de tipo ntext, text, image, geography, geometry y xml no se pueden usar en una ORDER BY cláusula .

No se puede especificar un entero o una constante cuando order_by_expression aparece en una función de clasificación. Para obtener más información, vea CLÁUSULA SELECT - OVER.

Si un nombre de tabla tiene un alias en la FROM cláusula , solo se puede usar el nombre del alias para calificar sus columnas en la ORDER BY cláusula .

Los nombres de columna y alias especificados en la ORDER BY cláusula deben definirse en la lista select si la SELECT instrucción contiene una de las siguientes cláusulas o operadores:

  • Operador UNION
  • Operador EXCEPT
  • Operador INTERSECT
  • SELECT DISTINCT

Además, cuando la instrucción incluye un UNIONoperador , EXCEPTo INTERSECT , los nombres de columna o alias de columna deben especificarse en la lista de selección de la primera consulta (lado izquierdo).

En una consulta que usa UNIONoperadores , EXCEPTo INTERSECT , ORDER BY solo se permite al final de la instrucción . Esta restricción solo se aplica a cuando se especifica UNION, EXCEPTy INTERSECT en una consulta de nivel superior y no en una subconsulta. Consulte la sección Ejemplos que se muestra a continuación.

La ORDER BY cláusula no es válida en vistas, funciones insertadas, tablas derivadas y subconsultas, a menos que también se especifiquen las TOP cláusulas o o OFFSET y FETCH . Cuando ORDER BY se usa en estos objetos, la cláusula solo se usa para determinar las filas devueltas por la TOP cláusula o OFFSET las cláusulas y FETCH . La ORDER BY cláusula no garantiza resultados ordenados cuando se consultan estas construcciones, a menos ORDER BY que también se especifique en la propia consulta.

OFFSET y FETCH no se admiten en vistas indizadas ni en una vista definida mediante la CHECK OPTION cláusula .

OFFSET y FETCH se pueden usar en cualquier consulta que permita TOP y ORDER BY con las siguientes limitaciones:

  • La OVER cláusula no admite OFFSET ni FETCH.

  • OFFSET y FETCH no se pueden especificar directamente en INSERTinstrucciones , UPDATE, MERGEy DELETE , pero se pueden especificar en una subconsulta definida en estas instrucciones. Por ejemplo, en la INSERT INTO SELECT instrucción OFFSET y FETCH se puede especificar en la SELECT instrucción .

  • En una consulta que usa UNIONoperadores OFFSET , EXCEPT o INTERSECT y FETCH solo se puede especificar en la consulta final que especifica el orden de los resultados de la consulta.

  • TOP no se puede combinar con OFFSET y FETCH en la misma expresión de consulta (en el mismo ámbito de consulta).

Usar OFFSET y FETCH para limitar las filas devueltas

Debe usar las OFFSET cláusulas y FETCH en lugar de la TOP cláusula para implementar una solución de paginación de consultas y limitar el número de filas enviadas a una aplicación cliente.

El uso OFFSET y FETCH como solución de paginación requiere ejecutar la consulta una vez para cada página de datos devueltos a la aplicación cliente. Por ejemplo, para devolver los resultados de una consulta en incrementos de 10 filas, debe ejecutar la consulta una vez para devolver las filas 1 a 10 y, a continuación, volver a ejecutar la consulta para devolver las filas 11 a 20, etc. Cada consulta es independiente y no está relacionada con las demás de forma alguna. Esto significa que, a diferencia de cuando se usa un cursor en que la consulta se ejecuta una vez y su estado se mantiene en el servidor, en este caso es la aplicación cliente la responsable de realizar el seguimiento del estado. Para lograr resultados estables entre las solicitudes de consulta que usan OFFSET y FETCH, se deben cumplir las condiciones siguientes:

  1. Los datos subyacentes que la consulta utilice no deben cambiar. Es decir, las filas tocadas por la consulta no se actualizan o todas las solicitudes de páginas de la consulta se ejecutan en una sola transacción mediante aislamiento de transacción serializable o instantánea. Para obtener más información sobre estos niveles de aislamiento de transacción, vea SET TRANSACTION ISOLATION LEVEL.

  2. La ORDER BY cláusula contiene una columna o combinación de columnas que se garantiza que sean únicas.

Vea el ejemplo "Ejecución de varias consultas en una sola transacción" en la sección Ejemplos más adelante en este artículo.

Si los planes de ejecución coherentes son importantes en la solución de paginación, considere la posibilidad de usar la OPTIMIZE FOR sugerencia de consulta para los OFFSET parámetros y FETCH . Vea Especificar expresiones para los valores OFFSET y FETCH en la sección Ejemplos más adelante en este artículo. Para obtener más información sobre OPTIMIZE FOR, vea Sugerencias de consulta.

Ejemplos

Los ejemplos de código de Transact-SQL de este artículo utilizan la base de datos de ejemplo AdventureWorks2022 o AdventureWorksDW2022, que se pueden descargar desde la página principal de Ejemplos y proyectos de la comunidad de Microsoft SQL Server.

Category Elementos de sintaxis ofrecidos
Sintaxis básica ORDER BY
Especificar orden ascendente y descendente DESC o ASC
Especificar una intercalación COLLATE
Especificar un orden condicional Expresión CASE
Uso de ORDER BY en una función de clasificación Funciones de categoría
Limitar el número de filas devueltas OFFSET y FETCH
Uso de ORDER BY con UNION, EXCEPT e INTERSECT UNION

Sintaxis básica

En los ejemplos de esta sección se muestra la funcionalidad básica de la ORDER BY cláusula mediante la sintaxis mínima necesaria.

A Especificar una sola columna definida en la lista de selección

En el siguiente ejemplo se ordena el conjunto de resultados por la columna numérica ProductID. Dado que no se especifica un criterio de ordenación específico, se usa el valor predeterminado (orden ascendente).

USE AdventureWorks2022;
GO

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

B. Especificar una columna que no esté definida en la lista de selección

En el ejemplo siguiente se ordena el conjunto de resultados por una columna que no se incluye en la lista de selección, pero se define en la tabla especificada en la FROM cláusula .

USE AdventureWorks2022;
GO

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

C. Especificar un alias como columna de ordenación

En el ejemplo siguiente se especifica el alias de columna SchemaName como columna de criterio de ordenación.

USE AdventureWorks2022;
GO

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

D. Especificar una expresión como columna de ordenación

En el ejemplo siguiente se utiliza una expresión como columna de ordenación. La expresión se define mediante la DATEPART función para ordenar el conjunto de resultados por el año en el que se contrataron los empleados.

USE AdventureWorks2022;
GO

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

Especificar el criterio de ordenación ascendente y descendente

A Especificar un orden descendente

En el siguiente ejemplo se ordena el conjunto de resultados en sentido descendente según la columna numérica ProductID.

USE AdventureWorks2022;
GO

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

B. Especificar un orden ascendente

En el siguiente ejemplo se ordena el conjunto de resultados en orden ascendente según la columna Name. Los caracteres están ordenados alfabéticamente, no numéricamente. Es decir, 10 se ordena antes que 2.

USE AdventureWorks2022;
GO

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

C. Especificar el orden ascendente y descendente

En el siguiente ejemplo se ordena el conjunto de resultados según dos columnas. El conjunto de resultados se ordena en primer lugar en sentido ascendente según la columna FirstName y, a continuación, en orden descendente según la columna LastName.

USE AdventureWorks2022;
GO

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

Especificar una intercalación

En el ejemplo siguiente se muestra cómo especificar una intercalación en la ORDER BY cláusula puede cambiar el orden en el que se devuelven los resultados de la consulta. Se crea una tabla que contiene una columna definida mediante una intercalación que no distingue entre mayúsculas y minúsculas, ni las tildes. Los valores se insertan con varias diferencias entre mayúsculas y minúsculas y énfasis. Dado que no se especifica una intercalación en la ORDER BY cláusula , la primera consulta usa la intercalación de la columna al ordenar los valores. En la segunda consulta, se especifica una intercalación con distinción entre mayúsculas y minúsculas en la ORDER BY cláusula , que cambia el orden en que se devuelven las filas.

USE tempdb;
GO

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

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;

Especificar un orden condicional

En los ejemplos siguientes se usa la CASE expresión en una ORDER BY cláusula para determinar condicionalmente el criterio de ordenación de las filas en función de un valor de columna determinado. En el primer ejemplo se evalúe el valor de la columna SalariedFlag de la tabla HumanResources.Employee. Los empleados que tienen la columna SalariedFlag establecida en 1 se devuelven en orden descendente según el BusinessEntityID. Los empleados que tienen la columna SalariedFlag establecida en 0 se devuelven en orden ascendente según el BusinessEntityID. En el segundo ejemplo, el conjunto de resultados se ordena según la columna TerritoryName cuando la columna CountryRegionName es igual a 'Estados Unidos' y según la columna CountryRegionName en las demás filas.

SELECT BusinessEntityID,
    SalariedFlag
FROM HumanResources.Employee
ORDER BY
    CASE SalariedFlag
        WHEN 1 THEN BusinessEntityID
    END DESC,
    CASE 
        WHEN SalariedFlag = 0 THEN BusinessEntityID
    END;
GO
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;

Uso de ORDER BY en una función de clasificación

En el ejemplo siguiente se usa la ORDER BY cláusula en las funciones ROW_NUMBERde clasificación , RANK, DENSE_RANKy NTILE.

USE AdventureWorks2022;
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;

Limitar el número de filas devueltas

Se aplica a: SQL Server 2012 (11.x) y versiones posteriores, Azure SQL Database y Azure SQL Instancia administrada.

En los ejemplos siguientes se usa OFFSET y FETCH para limitar el número de filas devueltas por una consulta.

A Especificar constantes enteras para los valores OFFSET y FETCH

En el ejemplo siguiente se especifica una constante entera como el valor de las OFFSET cláusulas y FETCH . La primera consulta devuelve todas las filas ordenadas según la columna DepartmentID. Compare los resultados devueltos por esta consulta con los de las dos consultas siguientes. La consulta siguiente usa la cláusula OFFSET 5 ROWS para omitir las cinco primeras filas y devolver todas las filas restantes. La última consulta utiliza la cláusula OFFSET 0 ROWS para comenzar por la primera fila y, a continuación, utiliza FETCH NEXT 10 ROWS ONLY para limitar las filas devueltas a 10 filas del conjunto de resultados ordenado.

USE AdventureWorks2022;
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. Especificar variables para los valores OFFSET y FETCH

En el ejemplo siguiente se declaran las variables @RowsToSkip y @FetchRows se especifican estas variables en las OFFSET cláusulas y FETCH .

USE AdventureWorks2022;
GO

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

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

C. Especificar expresiones para los valores OFFSET y FETCH

En el ejemplo siguiente se usa la expresión @StartingRowNumber - 1 para especificar el OFFSET valor y la expresión @EndingRowNumber - @StartingRowNumber + 1 para especificar el valor FETCH. Además, se especifica la sugerencia de consulta , OPTIMIZE FOR. Esta sugerencia se puede usar para que se utilice un valor concreto para una variable local al compilar y optimizar la consulta. El valor se utiliza solo durante la optimización de la consulta y no durante la ejecución de la misma. Para obtener más información, consulte Sugerencias de consulta.

USE AdventureWorks2022;
GO

-- Specifying expressions for OFFSET and FETCH values
DECLARE
    @StartingRowNumber TINYINT = 1,
    @EndingRowNumber 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. Especificar una subconsulta escalar constante para los valores OFFSET y FETCH

En el ejemplo siguiente se usa una subconsulta escalar constante para definir el valor de la FETCH cláusula . La subconsulta devuelve un valor único de la columna PageSize de la tabla dbo.AppSettings.

-- Specifying a constant scalar subquery
USE AdventureWorks2022;
GO

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

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

DECLARE @StartingRowNumber 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. Ejecución de varias consultas en una sola transacción

En el siguiente ejemplo se muestra un método de implementar una solución de paginación que permite asegurarse de la devolución de resultados estables en todas las solicitudes de la consulta. La consulta se ejecuta en una sola transacción mediante el nivel de aislamiento de instantáneas y la columna especificada en la ORDER BY cláusula garantiza la unicidad de columna.

USE AdventureWorks2022;
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'AdventureWorks2022'
) = 0
ALTER DATABASE AdventureWorks2022
SET ALLOW_SNAPSHOT_ISOLATION ON;
GO

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

-- Beginning the transaction.
BEGIN TRANSACTION;
GO

-- Declare and set the variables for the OFFSET and FETCH values.
DECLARE
    @StartingRowNumber INT = 1,
    @RowCountPerPage 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;
GO

COMMIT TRANSACTION;
GO

Uso de ORDER BY con UNION, EXCEPT e INTERSECT

Cuando una consulta usa los UNIONoperadores , EXCEPTo INTERSECT , la ORDER BY cláusula debe especificarse al final de la instrucción y se ordenan los resultados de las consultas combinadas. En el siguiente ejemplo se devuelven todos los productos que son rojos o amarillos y la lista combinada se ordena según la columna ListPrice.

USE AdventureWorks2022;
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;

Ejemplos: Azure Synapse Analytics y Sistema de la plataforma de análisis (PDW)

En el ejemplo siguiente se muestra la ordenación de un conjunto de resultados en sentido ascendente según la columna numérica EmployeeKey.

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

En el ejemplo siguiente se ordena un conjunto de resultados en sentido descendente según la columna numérica EmployeeKey.

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

En el ejemplo siguiente se ordena un conjunto de resultados según la columna LastName.

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

En el ejemplo siguiente se ordena según dos columnas. Esta consulta ordena primero en sentido ascendente según la columna FirstName y, después, ordena valores comunes FirstName en sentido descendente según la columna LastName.

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