2011-10-24 10 views
4

特定の列にオカレンスの番号を付けて新しい列(inCount)を作成するにはどうすればよいですか?ドンがあまりに番号4で表示されるので、ID 5からドン 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 

2の番号が付けられ

: ここ例です。 id 22からのドンは、上記の前のオカレンスのために3と番号が付けられます。

私はMS SQL Server 2008 R2 Expressエディションを使用しています。

ありがとうございました。

答えて

3

。 ROW_NUMBERのORDER BYは結果を変更しませんでしたが、idに変更したので、row_numberがサンプル・データを正しく保持します。

+1

彼は希望の番号を得るために 'name'ではなく' id'で注文します。 'name'によって順序付けされていれば(その動作は潜在的に未定義です)、異なる' id'が与えられたインクリメントされた 'inCount'でラベル付けされます。 –

+0

@ X-Zero - 私は自分自身について心配していましたが、簡単なテストを実行しましたが、order byがselectに指定されている限り、結果は影響を受けませんでした。私は結果が100%ではないかもしれないことが分かります。私は同意します。これは、row_number節のidでの順序でなければなりません。 – Leons

6

あなたは次のように、partition byを使用することができますが追加されましたOPで示されるのと同じ順序で結果を表示するために、選択のORDER BY句:これは

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

EDITを動作するはず

select row_number() over (partition by name order by id) as inCount 
,  * 
from YourTable 
order by 
     id 
関連する問題