Está en la página 1de 3

Función ROW_NUMBER

Función ROW_NUMBER()para asignar un número entero secuencial a cada fila de un conjunto de


resultados.
La ROW_NUMBER()es una función que asigna un número entero secuencial a cada fila dentro de una
partición de un conjunto de resultados. El número de fila comienza con 1 para la primera fila de cada
partición.

ROW_NUMBER() OVER (
[PARTITION BY partition_expression, ... ]
ORDER BY sort_expression [ASC | DESC], ...
)

La cláusula PARTITION BY divide el conjunto de resultados en


particiones. La ROW_NUMBER()función se aplica a cada partición por separado y reinicializa el
número de fila para cada partición.
La cláusula PARTITION BY es opcional. Si lo omite, la función ROW_NUMBER() tratará todo el
conjunto de resultados como una sola partición.
La cláusula ORDER BY define el orden lógico de las filas dentro de cada partición del conjunto de
resultados. La cláusula ORDER BY es obligatoria porque la función ROW_NUMBER()es sensible al
orden.

Usaremos la tabla sales.customers de Negocios2011

La siguiente instrucción utiliza ROW_NUMBER()para asignar a cada fila de clientes un número


secuencial:

SELECT ROW_NUMBER() OVER ( ORDER BY first_name ) AS row_num,


first_name, last_name, city
FROM sales.customers;

Aquí está la salida parcial:


.
El siguiente ejemplo usa la función ROW_NUMBER()para asignar un número entero secuencial a cada
cliente. Restablece el número cuando cambia la ciudad:

SELECT first_name, last_name, city,


ROW_NUMBER() OVER ( PARTITION BY city ORDER BY first_name ) AS row_num
FROM sales.customers
ORDER BY city;

La siguiente imagen muestra la salida parcial:


La función ROW_NUMBER()es útil para la paginación en aplicaciones. Por ejemplo, puede mostrar
una lista de clientes por página, donde cada página tiene 10 filas.
El siguiente ejemplo utiliza el ROW_NUMBER()para devolver clientes de la fila 11 a la 20, que es la
segunda página:

WITH cte_customers AS (
SELECT ROW_NUMBER() OVER( ORDER BY first_name, last_name) AS row_num,
customer_id, first_name, last_name
FROM sales.customers
)
SELECT customer_id, first_name, last_name
FROM cte_customers
WHERE row_num > 20 AND row_num <= 30;

 Primero, el CTE utilizó la función ROW_NUMBER()para asignar a cada fila del conjunto de
resultados un número entero secuencial.
 En segundo lugar, la consulta externa devolvió las filas de la segunda página, que tienen el
número de fila entre 11 y 20.
 CTE : WITH common_table_expression. Specifies a temporary named result set, known as a
common table expression (CTE) (Especifica un conjunto de resultados temporal con nombre,
conocido como una expresión de tabla común (CTE))

También podría gustarte