Access

【ACCESS】ACCESSのクエリーで連番をふる方法

Access数字と文字列
記事内に商品プロモーションを含む場合があります

連番といえばオートナンバーですね。

オートナンバーは非常に便利ですが、テーブルのフィールド型の1つであって

選択クエリーで選択した該当レコードにそれぞれ連番をふりたい場合には使えません。

そこで、クエリーで連番をふる方法をご紹介します。

概要

クエリーの中でDcount()関数を使います。

一意となるKEYについて、クエリー全体のレコードの中で、現在レコードのKEY以下のデータが何件あるか、で行番号を取得する方法です。

サンプルクエリー

今回はお客様からの問い合わせデータに対して連番を付与するサンプルを作成します。

例えば以下のようなデータがあるとします。

受信日付を範囲指定して取得する選択クエリー内で各行に連番を振りたいと思います。

受付データ
顧客ID 受信日時 受付種別
235315 2019/08/22 17:55:19 注文
402925 2019/08/22 14:40:59 クレーム
403153 2019/08/22 18:34:24 注文
403232 2019/08/22 12:04:38 注文
403630 2019/08/22 14:16:11 注文
610045 2019/08/22 15:50:27 注文
712916 2019/08/22 16:24:41 問い合わせ
712945 2019/08/22 17:47:38 問い合わせ
1105993 2019/08/22 13:44:04 注文
2407289 2019/08/22 17:35:46 注文
2601870 2019/08/22 17:10:10 注文

 

選択クエリー結果
連番 顧客ID 受信日時 受付種別
1 103300 2019/08/22 13:20:03 注文
2 233708 2019/08/22 16:06:55 注文
3 235315 2019/08/22 17:55:19 注文
4 402925 2019/08/22 14:40:59 クレーム
5 403153 2019/08/22 18:34:24 注文
6 403232 2019/08/22 12:04:38 注文
7 403630 2019/08/22 14:16:11 注文
8 610045 2019/08/22 15:50:27 注文
9 712916 2019/08/22 16:24:41 問い合わせ
10 712945 2019/08/22 17:47:38 問い合わせ

解説

Dcount()関数の引数は、①カウントする項目、②対象テーブル、③条件の3つです。

ここでは、①は*にしています。顧客IDでもOkです。

肝は、③の条件のところです。

条件は文字列として指定しますので、上記の指定で作成(展開)される文字列は以下の通りです。

顧客ID<=今の行の顧客ID

“顧客ID<=”の部分は文字列ですのでそのままの形。[顧客ID]の部分は展開され現在行の顧客ID番号となります。

例えば、4行目のレコードの連番は【顧客ID<=402925】つまり、受付データテーブルの中で顧客IDが402925以下のレコード数を出力することになります。

注意点

今回の顧客IDは数値型なのですが、これが文字列型だった場合は少し注意が必要です。

条件式を以下のように今の行の顧客IDをシングルクォートで囲む必要があります。

顧客ID<=今の行の顧客ID

このため、Dcount()の指定方法は以下のようになります。

応用編

上記では全データに連番を採番しましたが、受付種別毎にナンバリングしたい場合もあるかと思います。

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。