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 句が必要です。ここでは、注文する 3 番目の列がありません。したがって、出力を任意の順序で並べ替える (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 に答える