JASoft.org

El blog de José Manuel Alarcón Aguín. Programación web y mucho más...

MENÚ - JASoft: JM Alarcón

Cómo ordenar los resultados de una vista en SQL Server

Las vistas de SQL Server son muy útiles para utilizar consultas complicadas como si se trataran de simples tablas. Entre sus limitaciones, sin embargo, hay una que (a mi por lo menos) me resulta muy irritante: no se pueden ordenar. Es decir no se puede utilizar la cláusula ORDER BY en la sentencia SQL que define la vista.

Este truco permite saltarse las normas a la torera y utilizar ordenaciones de todos modos en las vistas. Y es que según la documentación la cláusula TOP de SQL siempre se puede usar con ORDER BY, incluso en las vistas, ya que si no no notendría mucho sentido ¿verdad?.

TOP sirve para obtener los 'x' primeros resultados de una consulta. Por ejemplo, si quiero obtener los últimos 1.000 registros de facturas de una tabla puedo escribir:

SELECT TOP 1000 * FROM Facturas ORDER BY NumFact DESC

Lo que muchas gente no sabe es que TOP admite una sintaxis alternativa que permite especificar un porcentaje de filas a devolver en lugar de un número absoluto. Esta es la cuestión que nos interesa ya que entonces basta con escribir:

CREATE VIEW FacturasAlReves
AS
SELECT TOP 100 PERCENT * FROM Facturas ORDER BY NumFact DESC
GO

para crear una vista de la tabla facturas que contiene todos sus registros ordenados en sentido inverso al normal.

Este es un ejemplo tonto, claro, pero lo que pretendo ilustrar es la técnica que nos permite saltarnos la restricción de orden de las vistas, que es usar TOP para obtener el 100% de los registros.

Interesante y útil ¿verdad?

José Manuel Alarcón
Banner

Comentarios (6) -

Argentina Pablo Fortunato

En algunos casos tuve el problema de que esa sentecia no me ordenaba la vista. De algún foro saqué que poniendo 99.999999 en lugar de 100 lo corregía, y así fue. Lo posteo por si le sirve a alguien.

Saludos!

Responder

Muy buen truco Pablo, ahora mi vista sale ordenada.

Saludos!

Responder

Gracias Placo, me sirvio tu ayuda.
Saludos

Responder

Muchas gracias, en verdad me sirvio mucho....

Responder

Mexico Luis Zúñiga

A mi me sale este error =(

SQL0104 - Símbolo 100 no válido. Símbolos válidos: + - AS <IDENTIFIER>.

Responder

Agregar comentario