मैं SQL Server 2008 R2 का उपयोग कर रहा हूं और नीचे एक संरचना है:
create table #temp( deptid int, regionid int)
insert into #temp
select 15000, 50
union
select 15100, 51
union
select 15200, 50
union
select 15300, 52
union
select 15400, 50
union
select 15500, 51
union
select 15600, 52
select deptid, regionid, RANK() OVER(PARTITION BY regionid ORDER BY deptid) AS "RANK",
ROW_NUMBER() OVER(PARTITION BY regionid ORDER BY deptid) AS "ROW_NUMBER",
DENSE_RANK() OVER(PARTITION BY regionid ORDER BY deptid) AS "DENSE_RANK"
from #temp
drop table #temp
और वर्तमान में आउटपुट नीचे जैसा है:
deptid regionid RANK ROW_NUMBER DENSE_RANK
--------------------------------------------------
15000 50 1 1 1
15200 50 2 2 2
15400 50 3 3 3
15100 51 1 1 1
15500 51 2 2 2
15300 52 1 1 1
15600 52 2 2 2
हालांकि मेरी आवश्यकता है row_number
ऊपर regionid
कॉलम लेकिन समूह द्वारा और पंक्ति से पंक्तिबद्ध नहीं है। बेहतर व्याख्या करने के लिए, नीचे मेरा वांछित परिणाम सेट है।
deptid regionid RN
-----------------------
15000 50 1
15200 50 1
15400 50 1
15100 51 2
15500 51 2
15300 52 3
15600 52 3
अगर मेरा प्रश्न अस्पष्ट है तो कृपया मुझे बताएं। धन्यवाद।
उत्तर:
जवाब के लिए 3 № 1उपयोग dense_rank() over (order by regionid)
अपेक्षित परिणाम प्राप्त करने के लिए।
select deptid, regionid,
DENSE_RANK() OVER( ORDER BY regionid) AS "DENSE_RANK"
from #temp
रैंक / row_number विंडो फ़ंक्शन के भीतर विभाजन विभाजन के भीतर संख्या असाइन करेगा, इसलिए आपको क्षेत्रीय पर ऑर्डर करने के लिए क्षेत्रीय पर विभाजन का उपयोग करने की आवश्यकता नहीं है।