Funcion Row_Number() en SQL Server

La función ROW_NUMBER() en SQL Server es una función de ventana que se utiliza para asignar un número secuencial único a las filas dentro de una partición de un conjunto de resultados, comenzando desde 1 para la primera fila en cada partición.

Sintaxis

ROW_NUMBER() OVER (PARTITION BY column1, column2, ... ORDER BY column1, column2, ...)
  • PARTITION BY: Divide el conjunto de resultados en particiones a las que se aplica la función ROW_NUMBER(). Cada partición comienza el número de fila en 1. Esta cláusula es opcional.
  • ORDER BY: Especifica el orden en que se asignan los números de fila. Esta cláusula es obligatoria.

Uso y Ejemplos

1. Numerar todas las filas en una tabla

Si deseas numerar todas las filas en una tabla sin particionarlas, puedes usar ROW_NUMBER() con solo la cláusula ORDER BY

SELECT
ROW_NUMBER() OVER (ORDER BY nombre) AS row_num,
id,
nombre,
salario
FROM
empleados;

Este ejemplo asignará un número de fila a cada fila en la tabla empleados ordenándolas por la columna nombre.

2. Numerar filas dentro de particiones

Si deseas numerar las filas dentro de particiones, utiliza la cláusula PARTITION BY. Por ejemplo, numerar a los empleados por departamento

SELECT
ROW_NUMBER() OVER (PARTITION BY departamento_id ORDER BY salario DESC) AS row_num,
departamento_id,
id,
nombre,
salario
FROM
empleados;

En este ejemplo, se numerarán los empleados dentro de cada departamento_id de acuerdo con el salario en orden descendente. Cada partición de departamento_id comenzará con ROW_NUMBER() igual a 1.

Aplicaciones Comunes

  1. Paginar Resultados: Usar ROW_NUMBER() para paginar grandes conjuntos de resultados dividiéndolos en páginas.
  2. Eliminar Duplicados: Identificar y eliminar filas duplicadas manteniendo solo una instancia de cada fila basada en un conjunto de columnas.
  3. Ordenar Datos: Asignar números de fila para ordenar datos en un conjunto de resultados.

Ejemplo de Paginación

Para paginar resultados, puedes usar ROW_NUMBER() junto con una consulta CTE (Common Table Expression) para obtener un rango de filas específico.

-- Define el rango de filas para la página
DECLARE @PageNumber INT = 1;
DECLARE @RowsPerPage INT = 10;

WITH EmpleadosPaginados AS (
SELECT
ROW_NUMBER() OVER (ORDER BY nombre) AS row_num,
id,
nombre,
salario
FROM
empleados
)
SELECT
id,
nombre,
salario
FROM
EmpleadosPaginados
WHERE
row_num BETWEEN (@PageNumber - 1) * @RowsPerPage + 1 AND @PageNumber * @RowsPerPage;

En este ejemplo, estamos paginando los resultados de la tabla empleados, obteniendo 10 filas por página. @PageNumber y @RowsPerPage son variables que puedes ajustar para obtener diferentes páginas de resultados.

Resumen

La función ROW_NUMBER() es una herramienta poderosa para numerar filas, particionar conjuntos de resultados y facilitar tareas como paginación y eliminación de duplicados. Al asignar un número de fila único a cada fila dentro de una partición ordenada, proporciona flexibilidad para manipular y analizar datos en SQL Server.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.