आपको अंतर केवल तभी दिखाई देगा जब आपके पास किसी विशेष ऑर्डरिंग मान के लिए विभाजन के भीतर संबंध हों।
RANK
और DENSE_RANK
इस मामले में नियतात्मक हैं, क्रम और विभाजन दोनों स्तंभों के लिए समान मान वाली सभी पंक्तियाँ एक समान परिणाम के साथ समाप्त होंगी, जबकि ROW_NUMBER
मनमाने ढंग से (गैर नियतात्मक रूप से) बंधी हुई पंक्तियों को एक वृद्धिशील परिणाम प्रदान करेगा।
उदाहरण: (सभी पंक्तियों में समान StyleID
है तो एक ही विभाजन में हैं और उस विभाजन के भीतर ID
. द्वारा आदेश दिए जाने पर पहली 3 पंक्तियाँ बंधी हुई हैं )
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
रिटर्न
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
आप देख सकते हैं कि तीन समान पंक्तियों के लिए ROW_NUMBER
वेतन वृद्धि, RANK
मान वही रहता है तो यह 4
. तक पहुंच जाता है . DENSE_RANK
तीनों पंक्तियों को समान रैंक भी प्रदान करता है लेकिन फिर अगले विशिष्ट मान को 2 का मान दिया जाता है।