2011-12-15 10 views
2

最初に、質問の文句を申し訳ありません。私はそれを表現する方法があまりにも分かりません。うまくいけば、以下の例は明らかです。SQL:列が変更された場合にリセットされるインデックスを持つ列を更新します。

私はテーブル

Id | Type | Order 
0 | Test | null 
1 | Test | null 
2 | Blah | null 
3 | Blah | null 

を持っている場合、私はだから私は「タイプ」によって、テーブルをグループ化することだし、インクリメンタルに「注文」に番号を割り当て、この

Id | Type | Order 
0 | Test | 1 
1 | Test | 2 
2 | Blah | 1 
3 | Blah | 2 

にそれを有効にします。タイプごとに1から始まります。

どうすればいいですか?私が使用している

DbがSybaseの15

+0

私の答えはSQL Serverを前提としています。あなたのRDBMSは何ですか?ご指定ください。 –

+0

私はSybaseを使用していますが、あなたの答えが正しいと確信していますが、私はSybaseで同じ結果を得られないようです。 –

+0

私は自分の答えを削除し、 'sybase'タグを追加して他の人があなたのRDBMSを知っているようにしました。 –

答えて

1
select 
    Id, 
    Type, 
    row_number() over(partition by Type order by Id) as [Order] 
from YourTable 

あなたが探しているものをあなたを得るためにROW_NUMBER機能を利用するべきです。

ROW_NUMBER(のTransact-SQL)

各パーティション内の最初の行の1から始まり、結果 組のパーティション内の行の順序番号を返します。

+0

これは私の正確な問題を解決するものではありません。それは一般的なケースでそれを解決する正しい方法です。 –

関連する問題