Home > Software engineering >  Is there a way to use ROW_NUMBER() and keep the numeration with same identifier?
Is there a way to use ROW_NUMBER() and keep the numeration with same identifier?

Time:11-23

I have the following table.

NumRegOper nReg
2067914121937973 1
2074206165945447 2
2074206165945447 3
2067914121937973 4
2074206165945098 5

If I use this script:

select ROW_NUMBER() OVER (order by NumRegOper desc) as NewOrder
    , *
from #tmp

I got this result:

NewOrder NumRegOper nReg
1 2074206165945447 2
2 2074206165945447 3
3 2074206165945098 5
4 2067914121937973 1
5 2067914121937973 4

But what I want is that keeps the same 'NewOrder' when its the same NumRegOper identifier. Like this:

NewOrder NumRegOper nReg
1 2074206165945447 2
1 2074206165945447 3
2 2074206165945098 5
3 2067914121937973 1
3 2067914121937973 4

There is a way to do this in SQL Server?

CodePudding user response:

As John Cappelletti says in the comments the following will give you the desired result:

 select  DENSE_RANK() OVER(order by NumRegOper desc) as NewOrder ,* from #tmp

CodePudding user response:

You need to specify the "PARTITION BY" argument to get the result you want. ROW_NUMBER Documentation

select ROW_NUMBER() OVER(PARTITION BY NumRegOper order by NumRegOper desc) as NewOrder ,* from #tmp

Running these queries helps you understand better.

select ROW_NUMBER() OVER() Wrong_RN, * from #tmp order by NumRegOper desc

select ROW_NUMBER() OVER() Right_RN, * from #tmp GROUP BY NumRegOper order by NumRegOper desc
  • Related