SQL

Función ROW_NUMBER de SQL Server para asignar un numérico secuencial

Estrada Web Group
Estrada Web Group
Función ROW_NUMBER de SQL Server para asignar un numérico secuencial

Resumen: en este tutorial, aprenderás a usar la función ROW_NUMBER() de SQL Server para asignar un entero secuencial a cada fila de un conjunto de resultados.

Introducción a la función ROW_NUMBER() de SQL Server

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

A continuación se muestra la sintaxis de la función ROW_NUMBER():

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

Examinemos la sintaxis de la función ROW_NUMBER() en detalle.

PARTITION BY

La cláusula PARTITION BY divide el conjunto de resultados en particiones (otro término para grupos de filas). La función ROW_NUMBER() 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 la omites, la función ROW_NUMBER() tratará todo el conjunto de resultados como una única partición.

ORDER BY

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.

Ejemplos de ROW_NUMBER() de SQL Server

Usaremos la tabla sales.customers de la base de datos de muestra para demostrar la función ROW_NUMBER().

SQL Server ROW_NUMBER()

Uso de la función ROW_NUMBER() de SQL Server

La siguiente declaración usa ROW_NUMBER() para asignar a cada fila de cliente un número secuencial:

SELECT
   ROW_NUMBER() OVER (
    ORDER BY first_name
   ) row_num,
   first_name,
   last_name,
   city
FROM
   sales.customers;

Resultado parcial, solamente se muestran 10 registros:

row_num first_name last_name city
1 Aaron Knapp Yonkers
2 Abbey Pugh Forest Hills
3 Abby Gamble Amityville
4 Abram Copeland Harlingen
5 Adam Henderson Los Banos
6 Adam Thornton Central Islip
7 Addie Hahn Franklin Square
8 Adelaida Hancock San Pablo
9 Adelle Larsen East Northport
10 Adena Blake Ballston Spa

En este ejemplo, omitimos la cláusula PARTITION BY, por lo tanto, ROW_NUMBER() trató todo el conjunto de resultados como una sola partición.

Ejemplo de uso de SQL Server ROW_NUMBER() usando particiones

El siguiente ejemplo usa la función ROW_NUMBER() para asignar un 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
   ) row_num
FROM
   sales.customers
ORDER BY
   city;

Resultado parcial, solamente se muestran 10 registros:

first_name last_name city row_num
Douglass Blankenship Albany 1
Mi Gray Albany 2
Priscilla Wilkins Albany 3
Andria Rivers Amarillo 1
Delaine Estes Amarillo 2
Jonell Rivas Amarillo 3
Luis Tyler Amarillo 4
Narcisa Knapp Amarillo 5
Abby Gamble Amityville 1
Barton Cox Amityville 2

En este ejemplo, usamos la cláusula PARTITION BY para dividir los clientes en particiones por ciudad. El número de fila se reinicializaba cuando cambiaba la ciudad.

Usando SQL Server ROW_NUMBER() usando paginación

La función ROW_NUMBER() es útil para la paginación en aplicaciones. Por ejemplo, puedes mostrar una lista de clientes por página, donde cada página tiene 10 filas.

El siguiente ejemplo usa 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
        ) 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;

Resultado parcial, solamente se muestran 10 registros:

customer_id first_name last_name
735 Aide Franco
952 Aileen Marquez
384 Aimee Merritt
1058 Aisha Woods
158 Alane Kennedy
697 Alane Mccarty
442 Alane Munoz
1061 Alanna Barry
1219 Alden Atkinson
475 Alec Peck

En este ejemplo:

  • 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.

En este tutorial, aprendiste a usar la función ROW_NUMBER() de SQL Server para asignar un entero secuencial a cada fila dentro de una partición de una consulta.

 

Compartir artículo:

Más artículos geniales

Tipos de datos CHAR de SQL Server

Tipos de datos CHAR de SQL Server

Resumen: en este tutorial, aprenderás a usar el tipo de datos CHAR de SQL Server para almacenar cadenas de caracteres no Unicode de longitud fija en la base de datos.

Ver artículo completo
¿Cómo eliminar las etiquetas html de una cadena en SQL?

¿Cómo eliminar las etiquetas html de una cadena en SQL?

En este artículo pondré un pequeño ejemplo de cómo quitar las etiquetas HTML en SQL. Voy a mostrar una función definida por el usuario en SQL Server que analiza el código HTML y regresa texto plano. Si requieres eliminar las etiquetas HTML de una página este ejemplo te servirá.

Ver artículo completo
¿Cómo convertir un valor de código ASCII en un carácter en SQL con la función CHAR?

¿Cómo convertir un valor de código ASCII en un carácter en SQL con la función CHAR?

En este tutorial, aprenderá cómo usar la función CHAR() de SQL Server para convertir un valor de código ASCII en un carácter.

Ver artículo completo

Manténgase actualizado

Obtenga excelente contenido en su bandeja de entrada todas las semanas.
Solo contenido excelente, no compartimos su correo electrónico con terceros.
Subir al inicio de la pantalla