Du kommer bara att se skillnaden om du har kopplingar inom en partition för ett visst beställningsvärde.
RANK och DENSE_RANK är deterministiska i det här fallet kommer alla rader med samma värde för både beställnings- och partitioneringskolumnen att få ett lika stort resultat, medan ROW_NUMBER kommer godtyckligt (icke deterministiskt) att tilldela ett ökande resultat till de bundna raderna.
Exempel: (Alla rader har samma StyleID så är i samma partition och inom den partitionen är de första 3 raderna kopplade när de sorteras efter 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
Retur
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
Du kan se att för de tre identiska raderna ROW_NUMBER stegar, RANK värdet förblir detsamma och sedan hoppar det till 4 . DENSE_RANK tilldelar också samma rang till alla tre raderna men sedan tilldelas nästa distinkta värde värdet 2.