Solo verá la diferencia si tiene vínculos dentro de una partición para un valor de pedido en particular.
RANK
y DENSE_RANK
son deterministas en este caso, todas las filas con el mismo valor para las columnas de ordenación y partición terminarán con un resultado igual, mientras que ROW_NUMBER
asignará arbitrariamente (no determinísticamente) un resultado incremental a las filas empatadas.
Ejemplo: (Todas las filas tienen el mismo StyleID
por lo tanto, están en la misma partición y dentro de esa partición, las primeras 3 filas están vinculadas cuando se ordenan por ID
)
WITH T(StyleID, ID)
AS (SELECT 1,1 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,1 UNION ALL
SELECT 1,2)
SELECT *,
RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'RANK',
ROW_NUMBER() OVER(PARTITION BY StyleID ORDER BY ID) AS 'ROW_NUMBER',
DENSE_RANK() OVER(PARTITION BY StyleID ORDER BY ID) AS 'DENSE_RANK'
FROM T
Devoluciones
StyleID ID RANK ROW_NUMBER DENSE_RANK
----------- -------- --------- --------------- ----------
1 1 1 1 1
1 1 1 2 1
1 1 1 3 1
1 2 4 4 2
Puede ver que para las tres filas idénticas el ROW_NUMBER
incrementos, el RANK
el valor permanece igual y luego salta a 4
. DENSE_RANK
también asigna el mismo rango a las tres filas, pero luego al siguiente valor distinto se le asigna un valor de 2.