Accessでグループ毎の連番を振る

Accessでグループ分けされているデータがあり、それらのグループごとに連番を振りたいとき。

f:id:rolling_panda:20150915082657p:plain


このテーブルに、Group1に1,2,3,…、Group2に1,2,3,…と連番を振る。

そういう時に、DCount関数を使って以下のようにするといいらしいです。

DCount("*","【テーブル名】","【ID】 <=" & [【ID】] & "and 【グループ名】=" & [【グループ名】])

詳細は以下の通り。

【テーブル名】振りたい連番があるテーブル名。

【ID】そのテーブルの主キーとなるフィールド。

【グループ名】グループ連番の親となるグループのフィールド名。




このようなクエリになります。

DCount("*","test","ID <=" & [ID] & "and Group=" & [Group])

あとは更新クエリで、G連番をこのクエリで更新するだけです。

ただし、グループが文字列などの場合はこのクエリは使えないので、数字に置き換えておくなどしましょう。

f:id:rolling_panda:20150915082736p:plain

 

 

こんな感じに一気に割り振ってくれます。

 

f:id:rolling_panda:20150915082807p:plain

既存のグループ連番に追加したい場合は、グループごとの連番の最大値を集計クエリで計算してフィールドに入れておいて、その最大値+新しい連番の値を入れていけます。

グループごとの最大値をとったテーブルを作って、その値を元のテーブルに反映させるとか。他にも良い方法はありそうですが。

プログラムを組んだ方が色々融通も利きそうですが、クエリひとつでもできるので単純なテーブル構造のときに。