2

我有一张这样的表,我想根据 cksid 和 guid 的组合对其进行排名。

cksid       guid
----------- -----------
1           301
1           301
1           301
2           303
2           303
3           303
4           303
4           303
4           303

输出应该像

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
4

3 回答 3

5

试试这个:

您只需要使用 row_number 函数

 select cksid ,guid ,
    row_number() over (partition by cksid ,guid order by (select 0)) as rank
    from <Table>

row_number() 需要 order by 子句。在这里,您没有第三列可供订购。所以我只是输入 (Select 0) ,它将以任何顺序对输出进行排序,这对我们来说并不重要。我们也可以通过 cksid ,guid 下订单,但我认为这有点过头了,因为我们可以通过提供 (select 0) 来获得相同的结果

于 2012-08-06T09:04:30.177 回答
1
SELECT cksid, guid,
       row_number() OVER (PARTITION BY cksid,guid ORDER BY cksid,guid)
FROM   youtable;
于 2012-08-06T09:05:38.043 回答
0
create table test11(cksid int,guid int)
INSERT INTO test11
VALUES(1,301),
(1,301),
(1,301),
(2,303),
(2,303),
(3,303),
(4,303),
(4,303),
(4,303)

select *,ROW_NUMBER() over (partition by cksid,guid order by guid) as ranks from test11
于 2012-08-06T09:09:03.823 回答