Anda hanya akan melihat perbedaannya jika Anda memiliki ikatan dalam partisi untuk nilai pemesanan tertentu.
RANK dan DENSE_RANK deterministik dalam hal ini, semua baris dengan nilai yang sama untuk kolom pengurutan dan partisi akan mendapatkan hasil yang sama, sedangkan ROW_NUMBER akan secara sewenang-wenang (non deterministik) memberikan hasil yang bertambah ke baris yang diikat.
Contoh: (Semua baris memiliki StyleID yang sama begitu juga di partisi yang sama dan di dalam partisi itu 3 baris pertama diikat ketika dipesan oleh 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
Kembali
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
Anda dapat melihat bahwa untuk tiga baris identik ROW_NUMBER peningkatan, RANK nilainya tetap sama kemudian melompat ke 4 . DENSE_RANK juga memberikan peringkat yang sama untuk ketiga baris tetapi kemudian nilai berbeda berikutnya diberi nilai 2.