- 11/09/2017
- 5 minutos de lectura
-
- j
- c
- M
- m
- M
-
+8
Se aplica a: SQL Server (todas las versiones compatibles) Azure SQL Database Azure SQL Managed Instance Azure Synapse Analytics Almacenamiento de datos en paralelo
Numera la salida de un conjunto de resultados. Más específicamente, devuelve el número secuencial de una fila dentro de una partición de un conjunto de resultados, comenzando en 1 para la primera fila de cada partición.
Nota
ROW_NUMBER
es un valor temporal calculado cuando se ejecuta la consulta. Para conservar números en una tabla, consulte Propiedad de IDENTIDAD y SECUENCIA.
Convenciones de sintaxis de Transact-SQL
Sintaxis
Nota
Para ver la sintaxis de Transact-SQL para SQL Server 2014 y versiones anteriores, consulte la documentación de versiones anteriores.
Argumentos
PARTITION BY value_expression
Divide el conjunto de resultados producido por la cláusula FROM en particiones a las que se aplica la función ROW_NUMBER. value_expression especifica la columna por la que se particiona el conjunto de resultados. Si no se especifica PARTITION BY
, la función trata todas las filas del conjunto de resultados de la consulta como un solo grupo. Para obtener más información, consulte la cláusula OVER (Transact-SQL).
order_by_clause
La cláusula ORDER BY
determina la secuencia en la que se asigna a las filas su ROW_NUMBER
dentro de una partición especificada. Es requerido. Para obtener más información, consulte la cláusula OVER (Transact-SQL).
Tipos de retorno
bigint
Observaciones generales
No hay garantía que las filas devueltas por una consulta usando ROW_NUMBER()
se ordenarán exactamente igual con cada ejecución a menos que se cumplan las siguientes condiciones.
-
Valores de la columna particionada son únicos.
-
Los valores de las
ORDER BY
columnas son únicos. -
Las combinaciones de valores de la columna de partición y
ORDER BY
son únicas.
ROW_NUMBER()
no es determinista. Para obtener más información, consulte Funciones deterministas y no deterministas.
Ejemplos
A. Ejemplos simples
La siguiente consulta devuelve las cuatro tablas del sistema en orden alfabético.
Aquí está el conjunto de resultados.
nombre | recovery_model_desc |
---|---|
maestro | SIMPLE |
modelo | COMPLETO |
msdb | SIMPLE |
tempdb | SIMPLE |
Para agregar una columna de número de fila delante de cada fila, agregue una columna con la función ROW_NUMBER
, en este caso llamada Row#
. Debe mover la cláusula ORDER BY
hasta la cláusula OVER
.
Aquí está el conjunto de resultados.
Fila # | nombre | recovery_model_desc |
---|---|---|
1 | maestro | SIMPLE |
2 | modelo | COMPLETO |
3 | msdb | SIMPLE |
4 | tempdb | SIMPLE |
Añadiendo un PARTITION BY
en la columna recovery_model_desc
reiniciará la numeración cuando cambie el valor recovery_model_desc
.
Aquí está el conjunto de resultados.
Fila # | nombre | recovery_model_desc |
---|---|---|
1 | modelo | COMPLETO |
1 | maestro | SIMPLE |
2 | msdb | SIMPLE |
3 | tempdb | SIMPLE |
B. Devolver el número de fila para los vendedores
El siguiente ejemplo calcula un número de fila para los vendedores en Adventure Works Cycles según su clasificación de ventas del año hasta la fecha.
Aquí está el conjunto de resultados .
C.Devolver un subconjunto de filas
El siguiente ejemplo calcula los números de fila para todas las filas de la tabla SalesOrderHeader
en el orden de OrderDate
y devuelve solo filas 50
a 60
inclusive.
D. Usando ROW_NUMBER () con PARTITION
El siguiente ejemplo usa el argumento PARTITION BY
para particionar el resultado de la consulta establecido por la columna TerritoryName
. La cláusula ORDER BY
especificada en la cláusula OVER
ordena las filas de cada partición por la columna SalesYTD
. La cláusula ORDER BY
de la instrucción SELECT
ordena todo el conjunto de resultados de la consulta por TerritoryName
.
Este es el conjunto de resultados.
Ejemplos: Azure Synapse Analytics y Parallel Data Warehouse
E. Devolver el número de fila para los vendedores
El siguiente ejemplo devuelve el ROW_NUMBER
para los representantes de ventas según su cuota de ventas asignada.
Aquí hay un conjunto de resultados parciales.
F. Usando ROW_NUMBER () con PARTITION
El siguiente ejemplo muestra el uso de la función ROW_NUMBER
con el argumento PARTITION BY
. Esto hace que la función ROW_NUMBER
numere las filas en cada partición.
Aquí hay un conjunto de resultados parcial.
Consulte también
RANK (Transact-SQL)
DENSE_RANK (Transact-SQL)
NTILE (Transact-SQL)