2016-07-26 26 views
0

Ich bin mit SQL Server 2008 R2 und eine Struktur haben, wie unten:T-SQL: ROW_NUMBER() Gruppe von

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 

Und Ausgang ist zur Zeit wie folgt:

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 

Meine Forderung jedoch ist row_number über regionid Spalte aber durch Gruppierung und nicht Zeile für Zeile. Um besser zu erklären, unten ist meine gewünschte Ergebnismenge.

deptid regionid RN 
----------------------- 
15000 50   1     
15200 50   1    
15400 50   1     
15100 51   2    
15500 51   2     
15300 52   3     
15600 52   3 

Bitte lassen Sie mich wissen, wenn meine Frage unklar ist. Vielen Dank.

+3

willst du die dose_rank() über (order by regionid) ohne die Partition dann? – ZLK

+0

Ok ich habe DENSE_RANK() über (nach RegionID) verwendet und es gibt mir das gewünschte Ergebnis. Danke :) –

+0

@ZLK: bitte posten das als Antwort, damit es unter beantwortete Fragen kommen kann – TheGameiswar

Antwort

3

Verwenden Sie dense_rank() over (order by regionid), um das erwartete Ergebnis zu erhalten.

select deptid, regionid, 
DENSE_RANK() OVER(ORDER BY regionid) AS 'DENSE_RANK' 
from #temp 

Partitionierung innerhalb eines Rang/row_number Fensterfunktion zuweisen Zahlen innerhalb der Partitionen, so dass Sie die regionids selbst keine Partition auf regionId verwenden müssen, um zu bestellen.

Verwandte Themen