I am new to SQL Server and trying to do some operations
Sample data:
Amount | BillID -------+------- 500 | 10009 500 | 1492 350 | 15892 222 | 15596 899 | 20566 350 | 9566
How can I create a new column that holds a serial number according to the Amount
column so the output looks like:
Amount | BillID | unique -------+--------+------- 500 | 10009 | 1 500 | 1492 | 1 350 | 15892 | 2 222 | 15596 | 3 899 | 20566 | 4 350 | 9566 | 2
Advertisement
Answer
I would recommend dense_rank()
:
select t.*, dense_rank() over(order by amount) rn from mytable t
This assigns a unique, incremental number to each amount
. The smallest amount gets ranks 1
, and the number are assigned incrementally by increasing amount
. This is not exactly the output you showed (where there is no apparent logic to order the ranks), but I think that’s the logic you want in essence.