sql >> Base de Datos >  >> RDS >> Sqlserver

¿Cómo generar un número de fila secuencial en tsql?

No es necesario evitar las funciones analíticas si su base de datos las admite, por ejemplo, ROW_NUMBER()

    SELECT
        ROW_NUMBER() OVER (ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) AS Number
    FROM
        [<TABLE_NAME>]

La sintaxis es Func([ arguments ]) OVER (analytic_clause) necesitas enfocarte en OVER (). Este último paréntesis crea particiones de sus filas y aplica Func() en estas particiones una por una. En el código anterior, solo tenemos un conjunto/partición de filas. Por lo tanto, la secuencia generada es para todas las filas.

Puede crear varios conjuntos de sus datos y generar un número de secuencia para cada uno de una sola vez. Por ejemplo, si necesita generar un número de secuencia para todo el conjunto de filas, esas tienen el mismo ID de categoría. Solo necesita agregar Partition By cláusula como esta (PARTITION BY categoryId ORDER BY [<PRIMARYKEY_COLUMN_NAME>]) .

Recuerda que después de FROM también puedes usar otro ORDER BY extra para ordenar sus datos de manera diferente. Pero no tiene efecto en el OVER ()