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.