Índice
0. Introducción1. Problema
2. Solución
3. Discusión de la Solución
4. Práctica: Código T-SQL
5. Conclusiones
6. Glosario
7. Literatura & Enlaces
0. Introducción
La presentación de resultados de una consulta en un orden específico puede sernos de enorme utilidad cuando se trata de hacer un análisis sobre los datos obtenidos; quizás en otra ocasión sólo nos interese un rango de filas (registros) determinadas para extraer datos de interés. En esta receta T-SQL aprenderemos cómo llevar a cabo esta tarea utilizando dos palabras claves relacionadas con ORDER BY: OFFSET y FETCH.
1. Problema
Implementar un método de presentación de resultados de una consulta por N cantidad de filas (tuplas) por página.
2. Solución
Usar la la cláusula ORDER BY junto con las palabras claves OFFSET FETCH.
3. Discusión de la Solución
La cláusula OFFSET-FECTCH [2] permite recuperar un grupo (página) de resultados a partir de los resultados de una consulta. Esta cláusula se puede combinar con la cláusula ORDER BY. Esto va a permitir que una vez ordenados los resultados por un conjunto de columnas, estos puede ser paginados especificando un desplazamiento (OFFSET) y una cantidad arbitraria de resultados a mostrar. Esta es la sintaxis a seguir para obtener esta funcionalidad:
[ORDER BY { order_by_expression [ ASC | DESC ] } [ ,...n][] ]
Descripción puntual
- ORDER BY: Ordenamiento de resultados por conjunto de columnas ya sea en orden ascendente (ASC) o descendente (DESC). Se recomiendo ordenar primero para obtener un resultado determinístico (la misma entrada genera la misma salida) [1].
- OFFSET: Cantidad de registros (filas) a omitir (desplazar), es decir, de la enémisa fila donde se debe empezar a mostrar resultados.
- FETCH: Cantidad de registros (filas) a mostrar a partir del desplazamiento.
En la Figura 1 se muestra la vista gráfica de esta operación.
Figura 1. Representación gráfica de la cláusula OFFSET-FETCH. |
4. Práctica: Código T-SQL
Usemos OFFSET-FETCH para obtener los ID (ProductID) y los nombres (Name) de los productos de la tabla Product ordenados por su nombre (Name) a partir de la tercera 3 fila y las 11 filas a partir del desplazamiento:
SELECT ProductID AS "ID Producto", Name AS "Nombre Producto"
FROM Production.Product
ORDER BY Name
OFFSET 3 ROWS FETCH NEXT 11 ROWS ONLY;
Descripción:
- OFFSET 3: Se empezará desde la tercera fila de los resultados. Este es el desplazamiento.
- FETCH NEXT 11 ROWS ONLY: Se recuperarán las siguientes 11 filas del resultado.
Una vez ejecutemos esta consulta obtendremos los siguientes resultados:
Figura 2. Obtención de 11 productos a partir de la tercera fila de los resultados. |
5. Conclusiones
La paginación de los resultados de una consulta es una operación importante a la hora de presentar (por ejemplo) resultados al usuario final de una aplicación, pues le evita tener que enfrentarse a una tabla con un sinnúmero de filas del resultado en su interfaz gráfica de usuario. En la próxima receta, la cual es parte de la serie de programación elemental en T-SQL, empezaremos con la declaración de variables.
6. Glosario
- Consulta
- Desplazamiento
- Resultado
7. Literatura & Enlaces
[1]: SQL Server 2012 T-SQL Recipes - A Problem-Solucion Approach by Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield. Copyright 2012 Jason Brimhall, David Dye, Jonathan Gennick, Andy Roberts, and Wayne Sheffield, 978-1-4302-4200-0.[2]: OFFSET FETCH Clause (SQL Server Compact) - http://technet.microsoft.com/en-us/library/gg699618(v=SQL.110).aspx
S
No hay comentarios:
Publicar un comentario
Envíe sus comentarios, dudas, sugerencias, críticas. Gracias.