Microsoft Access 掲示板

キーブレイク処理(クエリにて) / 18

23 コメント
views
4 フォロー
18

サンプルを載せておきます

最初に SetSequenceNumber関数 をデータベースにインポートして
利用可能な状態にしておきましょう

グループ毎連番を自動入力する関数
クエリで連番を表示する場合、DCount関数やサブクエリを利用する方法はあちこちで紹介されています。 しかし、この方法は自分より前のレコード件数をカウントするというロジックなのでレコード件数が多くなると幾何級数的に重くなります。また、グループ毎に連番を振るという仕様になると、条件式も複雑になってきます。 クエリは使わずにテーブルに連番フィールドを持たせて、そこに VBA で連番を書きこむようにすると高速...
fc2

 
■DDL

CREATE TABLE アクションテーブル (
      氏名     VARCHAR(50) NOT NULL
    , 発令日   DATETIME    NOT NULL
    , 組織名   VARCHAR(30) NOT NULL
    , GSeq日付 INT
    , GSeq組織 INT
    , CONSTRAINT pk_action PRIMARY KEY ( 氏名, 発令日 )
);

 
■データ例 (連番付与前)

氏名発令日組織名GSeq日付GSeq組織
山田 花子2022/01/01営業
山田 花子2023/04/01経営企画
山田 花子2023/09/01営業
山田 花子2024/01/01営業
山田 花子2024/04/01総務
青山 太郎2014/04/01人事
青山 太郎2014/05/26人事
青山 太郎2014/06/01人事
青山 太郎2015/04/01経営企画
青山 太郎2017/10/01法務
青山 太郎2018/04/01法務
青山 太郎2020/01/01法務
青山 太郎2021/04/01人事
青山 太郎2022/04/01総務

 
■グループ連番の付与

Sub set_number()
    Call SetSequenceNumber("GSeq日付", "アクションテーブル", "氏名", "発令日")
    Call SetSequenceNumber("GSeq組織", "アクションテーブル", "氏名,組織名", "発令日")
End Sub

 
■データ例 (連番付与後)

氏名発令日組織名GSeq日付GSeq組織
山田 花子2022/01/01営業11
山田 花子2023/04/01経営企画21
山田 花子2023/09/01営業32
山田 花子2024/01/01営業43
山田 花子2024/04/01総務51
青山 太郎2014/04/01人事11
青山 太郎2014/05/26人事22
青山 太郎2014/06/01人事33
青山 太郎2015/04/01経営企画41
青山 太郎2017/10/01法務51
青山 太郎2018/04/01法務62
青山 太郎2020/01/01法務73
青山 太郎2021/04/01人事84
青山 太郎2022/04/01総務91
通報 ...