Ordenar filas con ORDER BY
La cláusula ORDER BY ordena los resultados de una consulta por una o más columnas, hasta 8.060 bytes. Para obtener más información acerca del tamaño máximo de una cláusula ORDER BY, vea ORDER BY (cláusula de Transact-SQL).
Microsoft SQL Server 2005 permite especificar columnas de ordenación de las tablas de la cláusula FROM que no están especificadas en la lista SELECT. Los nombres de columna a los que se hace referencia en la cláusula ORDER BY deben corresponderse con una columna de la lista SELECT o con una columna de la tabla de la cláusula FROM sin ambigüedades. Si los nombres de columna están asociados a un alias en la lista SELECT, sólo puede utilizarse el nombre de alias en la cláusula ORDER BY. De igual modo, si los nombres de tablas están asociados a un alias en la cláusula FROM, sólo pueden utilizarse los nombres de alias para calificar sus columnas en la cláusula ORDER BY.
Una ordenación puede ser ascendente (ASC) o descendente (DESC). Si no se especifica ninguna, se supone que es ASC.
La siguiente consulta devuelve los resultados ordenados de forma ascendente por ProductID
.
USE AdventureWorks;
GO
SELECT ProductID, ProductLine, ProductModelID
FROM Production.Product
ORDER BY ProductID
Si se nombra más de una columna en la cláusula ORDER BY, las ordenaciones se anidan. La instrucción siguiente ordena las filas de la tabla Production.Product
primero por subcategoría de producto, en orden descendente, y después por ListPrice, en orden ascendente, dentro de cada subcategoría de producto.
USE AdventureWorks;
GO
SELECT ProductID, ProductSubcategoryID, ListPrice
FROM Production.Product
ORDER BY ProductSubcategoryID DESC, ListPrice
Los resultados exactos de una cláusula ORDER BY dependen de la intercalación de las columnas que se ordenan. Para obtener más información, vea Trabajar con intercalaciones. Para las columnas char, varchar, nchar y nvarchar, puede especificar que una operación ORDER BY se realice según una intercalación que sea diferente de la intercalación de la columna definida en la tabla o la vista. Puede especificar un nombre de intercalación de Windows o un nombre de intercalación de SQL. Por ejemplo, la columna LastName
de la tabla Person.Contact
de la base de datos AdventureWorks
está definida con la intercalación Latin1_General, pero en la siguiente secuencia de comandos, la columna se devuelve en orden ascendente mediante la intercalación Traditional_Spanish.
USE AdventureWorks;
GO
SELECT LastName FROM Person.Contact
ORDER BY LastName
COLLATE Traditional_Spanish_ci_ai ASC
GO
En las columnas que tengan tipos de datos text, ntext, image o xml no se puede usar ORDER BY. Además, en la lista ORDER BY no se permiten subconsultas, agregados ni expresiones constantes. Sin embargo, en la lista de selección es posible utilizar un nombre especificado por el usuario para los agregados o expresiones. Por ejemplo:
SELECT Color, AVG (ListPrice) AS 'average list price'
FROM Production.Product
GROUP BY Color
ORDER BY 'average list price'
ORDER BY solamente garantiza un resultado ordenado para la instrucción SELECT más externa de una consulta. Por ejemplo, considere la definición de vista siguiente:
CREATE VIEW TopView AS
SELECT TOP 50 PERCENT * FROM Person.Contact
ORDER BY LastName
A continuación, consulte la vista:
SELECT * FROM TopView
Aunque la definición de la vista contiene una cláusula ORDER BY, esa cláusula ORDER BY sólo se utiliza para determinar las filas que la cláusula TOP ha devuelto. Cuando se consulte la propia vista, SQL Server no garantiza que los resultados se ordenarán, a no ser que lo especifique explícitamente como se muestra en la siguiente consulta:
SELECT * FROM TopView
ORDER BY LastName
Vea también
Conceptos
Aspectos básicos de las consultas