#433 値の範囲ごとに列出力する方法 クエリ

テーブルに保存されたデータの2列を取り出して、一方を行の見出し、もう一方を列の見出しとして、それぞれのデータ数を求めたいような場合には「クロス集計クエリ」を使います。しかしクロス集計の場合、列の見出しは実際にデータとして保存されている個々の値が出力されてしまい、"範囲"でそれを集計することはできません

たとえば下図のクロス集計クエリでは、テーブルを「商品区分」でグループ化して行見出しとし、各商品の「単価」を列見出しとしています。そして、各商品区分・単価のデータ数が各欄に出力されています。このとき、列見出しは50円、100円、120円・・・・・というように、実際にデータとして存在している個々の値が出力されます。
クロス集計クエリの実行結果

一方、ここで紹介する方法を使うと、この列見出しを「0〜100円」、「101円〜200円」というように、金額の"範囲"で列を出力し、それぞれの件数を集計することができます
範囲出力されたクエリの実行結果

それには次のような「集計クエリ」(クロス集計クエリではありません)を使います。
デザインビュー
SQLビュー

ポイントは、「Sum(IIf([単価] Between 0 And 100,1,Null))」という記述です。『単価がある範囲であればそのレコード数を「1」件、そうでなければ「Null」件』としてカウントします。そしてSum関数を使ってグループごとのその件数を合計しています。

なお、実際にクエリを新規作成するときは、フィールド欄に「0〜100円: IIf([単価] Between 0 And 100,1,Null)」と入力して、集計方法を「合計」とします。クエリを保存すると、上記のようなSum関数式に勝手に変換されます。
| Index | Prev | Next |



T'sFactory
Accessで動く生産管理DB
Ureru Express
Webで使う販売顧客管理
Access開発&アドバイス
DB開発やテクニカルアドバイス
Copyright © T'sWare All rights reserved