ORDER BY (cláusula de Transact-SQL)

Especifica el orden utilizado en las columnas devueltas en una instrucción SELECT. La cláusula ORDER BY no es válida en vistas, funciones insertadas, tablas derivadas ni subconsultas, salvo que se especifique también TOP.

Nota

Cuando se utiliza ORDER BY en la definición de una vista, función insertada, tabla derivada o subconsulta, la cláusula sólo se utiliza para determinar las filas devueltas por la cláusula TOP. Esta cláusula no garantiza resultados ordenados cuando se consulten estos constructores, a menos que también se especifique ORDER BY en la misma consulta.

Icono de vínculo a temasConvenciones de sintaxis de Transact-SQL

Sintaxis

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

Argumentos

  • order_by_expression
    Especifica la columna según la que se va a ordenar. Una columna de orden se puede especificar como un nombre o un alias de columna, o un entero no negativo que representa la posición del nombre o alias en la lista de selección. No puede especificarse un entero cuando en una función de categoría aparece order_by_expression . Una columna de orden puede incluir una expresión, pero cuando la base de datos está en el modo de compatibilidad (90) de SQL Server, la expresión no puede resolverse en una constante. Los nombres o los alias de columna se pueden completar con el nombre de tabla o vista. En SQL Server, los nombres y los alias de columna completos se resuelven en las columnas que aparecen en la cláusula FROM. Si el parámetro order_by_expression no está calificado, su valor debe ser único entre todas las columnas que aparecen en la instrucción SELECT.

    Es posible especificar varias columnas de orden. La secuencia de las columnas de orden de la cláusula ORDER BY define la organización del conjunto ordenado de resultados.

    La cláusula ORDER BY puede incluir elementos que no aparecen en la lista de selección. Sin embargo, si se especifica SELECT DISTINCT, si la instrucción contiene una cláusula GROUP BY o si la instrucción SELECT contiene un operador UNION, las columnas de orden deben aparecer en la lista de selección.

    Además, cuando la instrucción SELECT incluye un operador UNION, los nombres o los alias de columna deben ser los especificados en la primera lista de selección.

    Nota

    Las columnas de tipo ntext, text, image o xml no se pueden utilizar en una cláusula ORDER BY.

  • COLLATE {collation_name}
    Especifica que la operación ORDER BY debe realizarse conforme a la intercalación especificada en collation_name y no conforme a la intercalación de la columna definida en la tabla o vista. collation_name puede ser un nombre de intercalación de Windows o de SQL. Para obtener más información, vea Configuración de intercalación en el programa de instalación y Usar intercalaciones de SQL Server. COLLATE sólo se aplica a las columnas con tipos de datos char, varchar, nchar y nvarchar.

  • ASC
    Indica que los valores de la columna especificada se deben ordenar de manera ascendente, desde el valor más bajo al más alto. ASC es el criterio de ordenación predeterminado.

  • DESC
    Indica que los valores de la columna especificada se deben ordenar de manera descendente, desde el valor más alto al valor más bajo.

Comentarios

Los valores NULL se tratan como los valores más bajos posibles.

No hay límite para el número de elementos en una cláusula ORDER BY. Sin embargo, existe un límite de 8.060 bytes en el tamaño de fila de las tablas de trabajo intermedias necesarias para las operaciones de orden. Este número limita el tamaño total de las columnas especificadas en una cláusula ORDER BY.

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

Ejemplos

En los ejemplos siguientes se muestra la clasificación de un conjunto de resultados.

Clasificación por la columna numérica ProductID. El valor predeterminado es orden ascendente.

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

Clasificación por la columna numérica ProductID en orden descendente.

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

Clasificación por la columna Name. Observe que los caracteres están ordenados alfabéticamente, no numéricamente. Es decir, 10 se ordena antes de 2.

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

Clasificación por dos columnas. Esta consulta ordena primero en orden ascendente por la columna FirstName y, a continuación, ordena en orden descendente por la columna LastName.

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