Access (一般機能)

Accessの一般機能に関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : Access 2013)
グループごとに連番を付与したい
投稿日時: 18/02/26 16:30:36
投稿者: NoLookUp

このようなテーブル&レコードがあります。

ID CD1 CD2 Grp Seq (テーブル名は便宜上 tbl )
 1   2   3
 2   1   1
 3   2   1
 4   1   3
 5   3   3
 6   3   1
 7   1   3
 8   1   1
 9   2   1
10   3   3
11   1   1
12   2   2
※IDは重複なし ※上記状態では Grp Seq は初期値(Nullもしくは0に統一)
 
これを CD1 - CD2 - ID 順に並べ5レコードごとグループ連番号を振ります。
ID CD1 CD2 Grp Seq
 2   1   1   1
 8   1   1   1
11   1   1   1
 4   1   3   1
 7   1   3   1
 3   2   1   2
 9   2   1   2
12   2   2   2
 1   2   3   2
 6   3   1   2
 5   3   3   3
10   3   3   3

ここまでは出来ました。
 
そしてグループごとに連番を付けたいです。
ID CD1 CD2 Grp Seq
 2   1   1   1   1
 8   1   1   1   2
11   1   1   1   3
 4   1   3   1   4
 7   1   3   1   5
 3   2   1   2   1
 9   2   1   2   2
12   2   2   2   3
 1   2   3   2   4
 6   3   1   2   5
 5   3   3   3   1
10   3   3   3   2

のちのち値を使用したいのでフィールド(例ではSeq)に更新したいです。
レコード数が多くなるのでVBAレコードセット総当たり戦ではなく更新クエリでナンバリングしたいです。
イッキではなくてもVBAで5回ループさせれば完成するという感じの方式でも構いません。
よろしくお願いします。

投稿日時: 18/02/26 16:34:34
投稿者: NoLookUp

5件ごとグルーピングする
という文言が抜けておりましたので追加します。

回答
投稿日時: 18/02/26 21:44:11
投稿者: sk

引用:
ID CD1 CD2 Grp Seq (テーブル名は便宜上 tbl )

各フィールドのデータ型に関する情報が明記されていませんが、
とりあえず、全てのフィールドのデータ型が数値型であると仮定します。
 
引用:
CD1 - CD2 - ID 順に並べ5レコードごとグループ連番号を振ります。

引用:
そしてグループごとに連番を付けたいです。

引用:
更新クエリでナンバリングしたいです。

( SQL ビュー)
-------------------------------------------------------------------------------
UPDATE [tbl]
SET [tbl].[Seq] = DCount("*","tbl","[Grp]=" & [tbl].[Grp] & " AND (([CD1]<" & [tbl].[CD1] & ") OR ([CD1]=" & [tbl].[CD1] & " AND [CD2]<" & [tbl].[CD2] & ") OR ([CD1]=" & [tbl].[CD1] & " AND [CD2]=" & [tbl].[CD2] & " AND [ID]<=" & [tbl].[ID] & "))")
-------------------------------------------------------------------------------
 
引用:
レコード数が多くなるのでVBAレコードセット総当たり戦ではなく

DCount 関数を使ったら使ったで実行時間がかかりそうですけど。

投稿日時: 18/02/27 09:20:06
投稿者: NoLookUp

うまくいきました。
 
条件が入り組んでしまい頭が暴発状態でした。
ありがとうございました。