7/21/2020

Access。クエリで連番のフィールドを作るには?【Serial number】

Access。クエリで連番のフィールドを作るには?

<Access:クエリで連番>

Accessのテーブルには、オートナンバー型という設定にすれば、自動的に連番を設定してくれますが、クエリで抽出したデータに連番を振る場合どうしたらいいのでしょうか?

クエリでは、無いフィールドつくるには、演算フィールドを使う方法しかありませんので、アイディアが必要になります。

次のテーブルを用意しました。
 
ランキングが「S」の店舗を抽出して、店舗コードとは別で1からの連番を設定したリストがほしいとします。

では、クエリで抽出しますので、作成タブの「クエリデザイン」をつかってクエリを作っていきます。
 
全てのフィールドを今回は使います。

ランキングが「S」の店舗を抽出したいので、抽出条件に「”S”」と設定すれば抽出することができます。

では、実行して確認してみましょう。
 
まずは、ランキングが「S」の店舗一覧をつくることはできました。

ただし、売上高に降順の設定をしていませんが、降順で表示されています。

今回は、元のテーブルと同じ店舗コード順にするので、店舗コードに昇順の設定をしておきましょう。
 
このクエリの店舗コードの左側に連番を作りたいわけです。

では、デザインビューに戻して、連番の演算フィールドを作っていきましょう。

デザインタブの列の挿入をつかって、店舗コードの左側に列を挿入します。
 
行番号を表示してくれるExcelのROW関数のような関数はAccessにはありませんので、別のアイディアが必要になります。

そこで、今のレコードの店舗コード以下の店舗コード数がいくつあるのかがわかれば、連番をつくることができます。

「いくつあるのか」ということで、AccessにはDCount関数というカウントすることができる関数がありますので、Dcount関数をつかってみましょう。

挿入したフィールドに、演算式を設定していきます。
 
連番: DCount("*","T店舗売上ランキング","店舗コード<=" & [店舗コード] & "and ランキング=" & "'S'")*1

とりあえず、実行して確認してみましょう。
 
このように、連番を設定することができました。

演算フィールドを説明します。
連番: DCount("*","T店舗売上ランキング","店舗コード<=" & [店舗コード] & "and ランキング=" & "'S'")*1

引数の”*”は、数えたいフィールドを設定します。

「”店舗コード”」でもOKですが、演算式が長くなるので、「*(アスタリスク)」を使うと省略できるので、今回は「*」をつかいました。

2番目の引数の"T店舗売上ランキング"は、テーブル名を設定します。

3番目の引数は
"店舗コード<=" & [店舗コード] & "and ランキング=" & "'S'"

店舗コードは、自分自身の店舗コードを含めてそれよりも小さい店舗コードがいくつあるの?というのが条件です。 

さらに、「& "and ランキング=" & "'S'"」でランキングが「S」のものだけ。
という条件を追加しています。

「ランキング=」のあとは、「”(ダブルコーテーション)」+「’(シングルコーテーション)」+「S」+「’(シングルコーテーション)」+「”(ダブルコーテーション)」と入力しています。

文字を判定条件で使う場合は、シングルコーテーションで囲む必要があります。

最後に、「*1」ですが、数値型ではなく、文字数値型という形式で算出されてしまうので、「*1」をつけないと、文字列と同じように左揃えになってしまうのを防止しています。

条件を変えていますが、「*1」をつけてないと、次のようになります。

クエリで連番を設定するのは、なかなか面倒な感じですね。