連番といえばオートナンバーですね。
オートナンバーは非常に便利ですが、テーブルのフィールド型の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(“*”,”受付データ”,”顧客ID<=” & [顧客ID])
解説
Dcount()関数の引数は、①カウントする項目、②対象テーブル、③条件の3つです。
ここでは、①は*にしています。顧客IDでもOkです。
肝は、③の条件のところです。
条件は文字列として指定しますので、上記の指定で作成(展開)される文字列は以下の通りです。
顧客ID<=今の行の顧客ID
“顧客ID<=”の部分は文字列ですのでそのままの形。[顧客ID]の部分は展開され現在行の顧客ID番号となります。
例えば、4行目のレコードの連番は【顧客ID<=402925】つまり、受付データテーブルの中で顧客IDが402925以下のレコード数を出力することになります。
注意点
今回の顧客IDは数値型なのですが、これが文字列型だった場合は少し注意が必要です。
条件式を以下のように今の行の顧客IDをシングルクォートで囲む必要があります。
顧客ID<=’今の行の顧客ID’
このため、Dcount()の指定方法は以下のようになります。
DCount(“*”,”受付データ”,”顧客ID<=” & “‘” & [顧客ID] & “‘”)
応用編
上記では全データに連番を採番しましたが、受付種別毎にナンバリングしたい場合もあるかと思います。
DCount(“*”,”受付データ”,”顧客ID<=” & [顧客ID] & ” AND 受付種別 =” & “‘” & [受付種別] & “‘”)