martes, 9 de septiembre de 2014

Receta T-SQL No. 1-17: Paginación de Resultados de una Consulta

Índice

0. Introducción
1. 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.
Representación gráfica de la cláusula OFFSET-FETCH
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:
Obtención de 11 productos a partir de la tercera fila de los 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.