如何根据重复对表列进行排名?

use*_*978 2 sql t-sql sql-server rank sql-server-2008

我有一张这样的桌子我希望根据cksid和guid的组合对它进行排名.

cksid       guid
----------- -----------
1           301
1           301
1           301
2           303
2           303
3           303
4           303
4           303
4           303
Run Code Online (Sandbox Code Playgroud)

输出应该是这样的

cksid       guid           rank
----------- ----------- ----------
1           301             1
1           301             2
1           301             3
2           303             1
2           303             2
3           303             1
4           303             1
4           303             2
4           303             3
Run Code Online (Sandbox Code Playgroud)

Joe*_*eph 5

试试这个:

你只需要使用row_number函数

 select cksid ,guid ,
    row_number() over (partition by cksid ,guid order by (select 0)) as rank
    from <Table>
Run Code Online (Sandbox Code Playgroud)

row_number()需要order by子句.在这里,您没有第三列可供订购.所以我只是放(选择0),它将以任何顺序对输出进行排序,这对我们来说无关紧要.我们本来可以通过cksid,guid给出顺序,但我认为这有点过头,因为我们可以通过给予(选择0)得到相同的结果