2011-10-24 13 views
4

如何創建具有特定列中出現次數的新列(inCount)? 下面是一個例子:如何使用SQL創建事件的內部編號

id  name  inCount 
1  Orly  1 
2  Ernest  1 
3  Rachel  1 
4  Don   1 
5  Don   2 
6  Ernest  2 
7  Angela  1 
8  Ernest  3 
9  David  1 
10  Rachel  2 
11  Sully  1 
12  Sully  2 
13  Rachel  3 
14  David  2 
15  David  3 
16  Kevin  1 
17  Kevin  2 
18  Orly  2 
19  Angela  2 
20  Sully  3 
21  Kevin  3 
22  Don   3 
23  Orly  3 
24  Angela  3 

唐從ID 5的編號爲2,因爲唐出現在ID 4太。 由於上述情況,編號爲22的編號爲3。

我使用MS SQL SERVER 2008 R2 Express版本。

謝謝。

回答

3

這應該工作

SELECT id, Name, ROW_NUMBER() OVER(PARTITION BY Name ORDER BY id) 
    FROM table 
ORDER BY id 

編輯。 ROW_NUMBER中的ORDER BY沒有改變結果,但我更改爲id,因爲它將保持樣本數據的row_number正確。

+1

他將通過'id'命令,而不是'name'來獲得所需的編號。按'name' _may_排序(如in,行爲可能未定義)會導致不同的'id'被給定的遞增的'inCount'標記。 –

+0

@ X-Zero - 我自己很擔心,但是我進行了一次快速測試,只要順序被指定用於選擇,結果就不會受到影響。我可以看到結果可能不是100%,所以我同意 - 它應該是row_number子句中的id。 – Leons

6

你可以使用partition by,如:by子句對選擇添加順序,以顯示由OP表示順序相同的結果:

select row_number() over (partition by name order by id) as inCount 
,  * 
from YourTable 
order by 
     id 
相關問題