2012-08-06 67 views
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 

回答

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子句。在這裏你沒有第三列來排序。所以我只是把(選擇0)以任何順序排序輸出,這對我們無關緊要。我們可以通過給出爲了cksid,也是全局唯一標識符,但我認爲這是一個小腦袋上,我們可以得到的只是給了相同的結果(選擇0)

+1

+1:雖然,使用時'(SELECT 0)''trick',我會建議添加一個解釋,爲什麼... – MatBailie 2012-08-06 09:07:53

+0

@Dems:謝謝你的評論。我已經添加了解釋。請隨時添加,如果它不夠好 – 2012-08-06 09:17:34

+0

在這裏你可以通過guid命令。 – AnandPhadke 2012-08-06 09:20:37

1
SELECT cksid, guid, 
     row_number() OVER (PARTITION BY cksid,guid ORDER BY cksid,guid) 
FROM youtable; 
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 
相關問題