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 Warehouse en Microsoft Fabric Base de datos SQL de 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 ]
]
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 UNION
operador , EXCEPT
o 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 UNION
operadores , EXCEPT
o INTERSECT
, ORDER BY
solo se permite al final de la instrucción . Esta restricción solo se aplica a cuando se especifica UNION
, EXCEPT
y 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 admiteOFFSET
niFETCH
.OFFSET
yFETCH
no se pueden especificar directamente enINSERT
instrucciones ,UPDATE
,MERGE
yDELETE
, pero se pueden especificar en una subconsulta definida en estas instrucciones. Por ejemplo, en laINSERT INTO SELECT
instrucciónOFFSET
yFETCH
se puede especificar en laSELECT
instrucción .En una consulta que usa
UNION
operadoresOFFSET
,EXCEPT
oINTERSECT
yFETCH
solo se puede especificar en la consulta final que especifica el orden de los resultados de la consulta.TOP
no se puede combinar conOFFSET
yFETCH
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:
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.
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 puede 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_NUMBER
de clasificación , RANK
, DENSE_RANK
y 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 UNION
operadores , EXCEPT
o 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;
Contenido relacionado
- Expresiones (Transact-SQL)
- SELECT (Transact-SQL)
- Cláusula FROM más JOIN, APPLY, PIVOT (Transact-SQL)
- Funciones de categoría (Transact-SQL)
- TOP (Transact-SQL)
- Sugerencias de consulta (Transact-SQL)
- Operadores de conjuntos: EXCEPT e INTERSECT (Transact-SQL)
- Operadores de conjuntos: UNION (Transact-SQL)
- CASE (Transact-SQL)