Rozdíl uvidíte pouze v případě, že máte vazby v rámci oddílu pro konkrétní hodnotu objednávky.
RANK a DENSE_RANK jsou v tomto případě deterministické, všechny řádky se stejnou hodnotou pro sloupec řazení i dělení skončí se stejným výsledkem, zatímco ROW_NUMBER libovolně (nedeterministicky) přiřadí svázaným řádkům inkrementující výsledek.
Příklad: (Všechny řádky mají stejné StyleID tak jsou ve stejném oddílu a v tomto oddílu jsou první 3 řádky shodné, když jsou seřazeny podle 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
Vrátí
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
Můžete vidět, že u tří stejných řádků je ROW_NUMBER přírůstky, RANK hodnota zůstane stejná, pak skočí na 4 . DENSE_RANK také přiřadí stejnou hodnost všem třem řádkům, ale další odlišná hodnota má přiřazenou hodnotu 2.