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」をつけてないと、次のようになります。
クエリで連番を設定するのは、なかなか面倒な感じですね。