Access の集計データを読みやすく、理解しやすくするには、クロス集計クエリの使用を検討してください。 クロス集計クエリは、合計や平均などの集計関数を計算し、集計結果を 2 セットの値に分類してデータシートの行と列の両方向に表示します。 リボンの [作成] をクリックし、[クエリ] で [クエリ ウィザード] をクリックします。 [新しいクエリ] ダイアログ ボックスの [クロス集計クエリ ウィザード] をダブルクリックします。
一連の見出しに日付の値がある場合、ウィザードによって月や四半期などの標準的な期間でレコードをグループ化することができます。
この記事の内容
注: クロス集計クエリは、Access Web App では使用できません。また、Web データベースでは部分的にのみサポートされます。Web オブジェクトからは使用することができません。
概要
クロス集計クエリは、選択クエリの種類の一つです。 クロス集計クエリを実行すると、別の種類のデータシートに見られる構造の異なるデータシートに実行結果が表示されます。
クロス集計クエリの構造は、次の図に示すように、同じデータを表示する単純な選択クエリよりも読みやすくなります。
1. この選択クエリでは、従業員とカテゴリを基準にして、垂直方向だけに集計データがグループ化されています。
2. クロス集計クエリでも、同じデータを表示できますが、水平方向と垂直方向の両方向でデータがグループ化されるため、よりコンパクトで読みやすいデータシートになります。
クロス集計クエリを作成する際は、行見出しを含むフィールド、列見出しを含むフィールド、集計値を含むフィールドを指定します。 列見出しおよび集計値を指定するときは、それぞれに 1 つのフィールドのみを使用できます。 行見出しを指定するときは、フィールドを 3 つまで使用できます。
式を使用して行見出し、列見出し、または集計値を作成することもできます。 詳細については、「SQL 集計関数」を参照してください。
1. こちら側の 1 列、2 列、または 3 列には行見出しが格納されます。 行見出しとして使用するフィールドの名前が、これらの列の 1 行目に表示されます。
2. ここに、行見出しが表示されます。 複数の行見出しフィールドを使用すると、行見出しの組み合わせごとに行が作成されるため、クロス集計データシートの行数が、急速に増加する場合があります。
3. こちら側の列には、列見出しおよび集計値が格納されます。 列見出しフィールドの名前はデータシートには表示されません。
4. ここに、集計値が表示されます。
クロス集計クエリの作成方法
クロス集計クエリ ウィザードの使用 クロス集計クエリ ウィザードは、一般にクロス集計クエリを最も短時間で簡単に作成する方法です。 ウィザードでは、ほとんどの操作が自動で行われますが、ウィザードにはないオプションもいくつかあります。
ウィザードには、次のようなメリットがあります。
-
使いやすい。 ウィザードを実行して、指示に従っていくつかの質問に答えるだけです。
-
自動的に日付を期間にグループ化できる。 日付/時刻データが含まれているフィールドを列見出しに使用する場合、ウィザードを使うと、日付を月や四半期などの期間にグループ化することもできます。
ヒント: 日付/時刻フィールドの値を列見出しに使用する場合、ウィザードにはない会計年度や 2 年間などの期間に日付をグループ化したい場合は、ウィザードを使ってクエリを作成しないでください。 代わりに、デザイン ビューでクロス集計クエリを作成し、式を使って期間を作成します。
-
出発点として使用することができる。 ウィザードを使って基本的なクロス集計クエリを作成してから、デザイン ビューを使ってクエリのデザインを微調整します。
ただし、ウィザードを使うと、次のことはできません。
-
複数のテーブルまたはクエリをレコード ソースとして使う。
-
式を使ってフィールドを作成する。
-
パラメーター プロンプトを追加する。
-
固定値のリストを列見出しとして使用するように指定する
ウィザードの最後のステップでは、デザイン ビューでクエリを変更することを選択できます。 そのため、ウィザードでサポートされていない追加のレコード ソースなどのクエリ デザイン要素を追加できます。
デザイン ビューでの作業 デザイン ビューを使って、クエリ デザインをより細かく設定できます。 ウィザードでは利用できない機能がサポートされます。
次のことを行う必要がある場合は、デザイン ビューを使ってクロス集計クエリを作成することを検討してください。
-
プロセスをより詳細に制御する。 ウィザードでは、いくつかの設定が自動的に行われます。
-
複数のテーブルまたはクエリをレコード ソースとして使う。
-
クエリにパラメーター プロンプトを追加する。
-
クエリのフィールドとして式を使用する
-
固定値のリストを列見出しとして使用するように指定する
-
デザイン グリッドを使って実践する。
SQL ビューでのクエリの記述 必要であれば、SQL ビューでクロス集計クエリを記述できます。 ただし、SQL ビューを使って、パラメーター データの種類を指定することはできません。 クロス集計クエリでパラメーターを使用する場合は、デザイン ビューでクエリを変更して、パラメーター データの種類を指定する必要があります。
ヒント: クロス集計クエリの作成方法は、1 つだけではないことを覚えておいてください。 ウィザードを使ってクエリを作成してから、デザイン ビューを使ってクエリ デザインを変更することができます。
クロス集計クエリ ウィザードを使ってクロス集計クエリを作成する
クロス集計クエリ ウィザードを使うには、1 つのテーブルまたはクエリをクロス集計クエリのレコード ソースとして使用する必要があります。 クロス集計クエリに含めるデータの一部しか 1 つのテーブルに含まれていない場合は、必要なデータを返す選択クエリの作成から始めます。 選択クエリの作成方法については、「関連項目」セクションを参照してください。
この例では、Northwind のサンプル データベースから Products テーブルを使用して、クロス集計クエリを作成します。 すべての仕入先からカテゴリごとに製品の個数を表示する必要があります。
-
[作成] タブの [クエリ] グループで [クエリ ウィザード] をクリックします。
-
[新しいクエリ] ダイアログ ボックスの [クロス集計クエリ ウィザード] をクリックし、[OK] をクリックします。
クロス集計クエリ ウィザードが開始します。
-
ウィザードの最初のページで、クロス集計クエリの作成に使用するテーブルまたはクエリを選びます。 この例では、[Products] テーブルを選択し、[次へ] をクリックします。
-
次のページで、行見出しとして使用する値が格納されているフィールドを選択します。 行見出しのソースとして、フィールドを 3 つまで選択できますが、使用する行見出しが少ないほど、クロス集計データシートが読みやすくなります。 行見出しとして複数のフィールドを選択する場合、フィールドを選択する順序によって、結果を並べ替える既定の順序が決まります。
この例では、[Supplier IDs.Value] を選択して、[>] ボタンをクリックします。 ダイアログ ボックスの下部にあるサンプル クエリのプレビューの左側に沿って、そのフィールド名が表示されます。 [次へ] をクリックして続行します。
-
次のページで、列見出しとして使用する値が格納されているフィールドを選択します。 通常は、結果が読みやすくなるよう、少ない値が格納されているフィールドを選択します。 たとえば、使用する値が少ないフィールド (性別など) を使用する方が、使用する値が多いフィールド (年齢など) を使用するよりも望ましいです。
列見出しとして使用するように選択したフィールドが日付/時刻データ型の場合、月、四半期などの期間に日付をグループ化する方法を指定できる手順が追加されます。
この例では、[カテゴリ] を選択し、ダイアログ ボックスの下部にあるサンプル クエリのプレビューの上部に沿って、カテゴリのサンプル名が表示されます。 [次へ] をクリックして続行します。
-
列見出しに日付/時刻型フィールドを選択すると、ウィザードの次のページでは日付のグループ化に使用する期間を指定するように求められます。 [年]、[四半期]、[月]、[日]、[日付/時刻] を指定することができます。 列見出しに日付/時刻型フィールドを選択しない場合、このページはスキップされます。
-
次のページで、集計値の計算に使用するフィールドと関数を選びます。 選んだフィールドのデータ型によって、使用できる関数が決まります。
同じページで、[集計値を表示する] チェック ボックスをオンまたはオフにして、行の合計を含めるか、除外します。
行の合計を含めると、クロス集計クエリには、フィールド値と同じフィールドおよび関数を使用する行見出しが追加されます。 行の合計を含めることにより、残りの列を集計する追加の列が挿入されます。 たとえば、クロス集計クエリで場所および性別 (性別の列見出し) ごとに平均年齢を計算する場合、追加の列では、すべての性別の場所ごとの平均年齢が計算されます。
この例では、仕入先とカテゴリの各交差部分で製品数がカウントされるように、[フィールド] ボックスで [ID]、[関数] ボックスで [Count] を選択します。 [集計値を表示する] チェック ボックスはオンのままにします。 各仕入先の製品数を合計する列が作成されます。 [次へ] をクリックして続行します。
-
ウィザードの最後のページで、クエリの名前を入力し、結果を表示するか、クエリ デザインを変更するかを指定します。
デザイン ビューでクロス集計クエリを編集すると、行の合計を作成するために使用する関数を変更できます。
-
Northwind データベースの Products テーブルを使用してこの例の手順を実行すると、クロス集計クエリには、行として仕入先名、列として製品カテゴリ名、各交差部分に製品の個数が表示されます。
デザイン ビューを使用してクロス集計クエリを作成すると、必要な数のレコード ソース (テーブルとクエリ) を使用できます。 ただし、最初に必要なすべてのデータを返す選択クエリを作成し、そのクエリをクロス集計クエリの唯一のレコード ソースとして使用することで、設計をシンプルに保つことができます。 選択クエリの作成方法については、「関連項目」セクションを参照してください。
デザイン ビューでクロス集計クエリを作成するときは、デザイン グリッドの [集計] 行および [クロス集計] 行を使用して、値を列見出しに使用するフィールド、値を行見出しに使用するフィールド、および合計、平均、カウント、または他の計算の対象フィールドを指定します。
1. これらの行の設定により、フィールドが行見出し、列見出し、または集計値のいずれになるかが決まります。
2. この設定では、フィールドの値が行見出しとして表示されます。
3. この設定では、フィールドの値が列見出しとして表示されます。
4. これらの設定により、集計値が作成されます。
クエリを作成する
-
[作成] タブの [クエリ] グループで [クエリ デザイン] をクリックします。
-
[テーブルの表示] ダイアログ ボックスで、レコード ソースとして使用するそれぞれのテーブルまたはクエリをダブルクリックします。
複数のレコード ソースを使用する場合は、テーブルまたはクエリが共通するフィールドで結合されていることを確認します。 テーブルとクエリを結合する方法の詳細については、[参照] セクションを参照してください。
-
[テーブルの表示] ダイアログ ボックスを閉じます。
-
[デザイン] タブの [クエリの種類] で [クロス集計] をクリックします。
-
クエリ デザイン ウィンドウで、行見出しのソースとして使用する各フィールドをダブルクリックします。 行見出しにはフィールドを 3 つまで選択できます。
-
クエリ デザイン グリッドの、それぞれの行見出しフィールドに対する [クロス集計] 行で [行見出し] をクリックします。
[抽出条件] 行に式を入力して、フィールドの結果を制限することができます。 [並べ替え] 行を使用して、フィールドの並べ替え順序を指定することもできます。
-
クエリ デザイン ウィンドウで、列見出しのソースとして使用するフィールドをダブルクリックします。 列見出しには、1 つのフィールドのみを選択できます。
-
クエリ デザイン グリッドの、列見出しフィールドに対する [クロス集計] 行で [列見出し] をクリックします。
[抽出条件] 行に式を入力して、列見出しフィールドの結果を制限することができます。 ただし、列見出しフィールドに条件式を使用しても、クロス集計クエリから返される列の数は制限されません。 代わりに、データが含まれる列が制限されます。 たとえば、赤、緑、および青の 3 つの値を使用できる列見出しフィールドがあるとします。 列見出しフィールドに条件 ='青' を適用した場合、クロス集計に赤の列と緑の列は表示されますが、データは青の列にのみ格納されます。
列見出しとして表示する値を制限する場合は、クエリの [列見出し] プロパティを使用して、固定値のリストを指定することができます。 詳細については、次のセクションを参照してください。
-
クエリ デザイン ウィンドウで、集計値の計算に使用するフィールドをダブルクリックします。 集計値に使用するフィールドを 1 つだけ選択することができます。
-
クエリ デザイン グリッドの、集計値に対する [集計] 行で、値の計算に使用する集計関数を選択します。
-
集計値フィールドに対する [クロス集計] 行で、[値] をクリックします。
集計値フィールドには、条件または並べ替えを指定できません。
-
[デザイン] タブの [結果] グループで、[実行] をクリックします。
列見出しに固定値を指定する
列見出しに使用する固定値を指定する場合は、クエリの "列見出し" プロパティを設定します。
-
デザイン ビューでクロス集計クエリを開きます。
-
プロパティ シートが表示されていない場合は、F4 キーを押して表示します。
-
プロパティ シートで、[標準] タブのすぐ上の [選択の種類] が [クエリ プロパティ] になっていることを確認します。 そうでない場合は、クエリ デザイン グリッドの上のスペースで空白の場所をクリックします。
-
プロパティ シートの [標準] タブの "列見出し" プロパティで、列見出しとして使用するカンマ区切りの値のリストを入力します。
一部の文字 (ほとんどの句読点など) は、列見出しに使用できません。 これらの文字を値のリストに使用すると、該当する文字がそれぞれアンダースコア (_) に置き換えられます。
クロス集計クエリの SQL 構文
クロス集計クエリは、SQL では TRANSFORM ステートメントとして表されます。 TRANSFORM ステートメントの構文は、次のとおりです。
TRANSFORM aggfunction
selectstatement PIVOT ピボットフィールド [IN (value1[, value2[, ...]])]TRANSFORM ステートメントでは、次の引数を使用します。
引数 |
説明 |
aggfunction |
選択されたデータに対して実行される SQL 集計関数。 |
selectstatement |
SELECT ステートメント。 |
pivotfield |
クエリの結果セットの列見出しの作成に使用するフィールドまたは式。 |
value1, value2 |
列見出しの作成に使用する固定値。 |
SQL ビューでは、クロス集計クエリのレコード ソースとして使用できるテーブルまたはクエリの数は制限されません。 ただし、クロス集計クエリで使用するすべてのデータを返す選択クエリを作成し、その選択クエリをレコード ソースとして使用することで、設計をシンプルに保つことができます。 選択クエリの作成方法については、「関連項目」セクションを参照してください。
-
[作成] タブの [その他] グループで、[クエリ デザイン] をクリックします。
-
[テーブルの表示] ダイアログ ボックスを閉じます。
-
[デザイン] タブの [ビュー] グループで、[ビュー] をクリックし、[SQL ビュー] をクリックします。
-
[SQL オブジェクト] タブで、次の SQL 構文を入力するか貼り付けます。
TRANSFORM SELECT FROM GROUP BY PIVOT ;
-
1 行目の TRANSFORM の後に、集計値の計算に使用する式を入力します (例: Sum([Amount]))。
複数のテーブルまたはクエリをレコード ソースとして使用している場合は、各フィールド名にテーブル名またはクエリ名を含めます (例: Sum([Expense].[Amount]))。
-
2 行目の SELECT の後に、行見出しに使用するフィールドまたはフィールド式のリストを入力します。 複数のリスト項目は、コンマで区切ります (例: [Budget].[Dept_ID], [Expense].[Type])。
-
3 行目の FROM の後に、レコード ソースとして使用するテーブルまたはクエリのリストを入力します (例: Budget, Expense)。
-
4 行目の GROUP BY の後に、手順 6 の SELECT 句で使用したのと同じフィールド リストを入力します。
-
5 行目の PIVOT の後に、列見出しに使用するフィールド名または式を入力します (例: PIVOT [Budget].[Year])。
SQL ビューでクロス集計クエリに並べ替え順序を追加するには、ORDER BY 句を使います。
-
GROUP BY 句と PIVOT 句の間に 1 行挿入します。
-
新しい行で、「ORDER BY」と入力し、その後に 1 文字分の空白を入力します。
-
並べ替えるフィールド名または式を入力します (例: ORDER BY [Expense].[Expense_Class])。
既定では、ORDER BY 句による値の並べ替え順は昇順です。 降順で並べ替える場合は、フィールド名または式の後に「DESC」と入力します。
-
並べ替えるフィールドまたは式を追加する場合は、カンマを入力してから、追加のフィールド名または式を入力します。 並べ替えの順序は、ORDER BY 句でのフィールドまたは式の並び順になります。
-
クロス集計クエリの SQL ビューで PIVOT 句の最後に「IN」と入力し、その後に列見出しとして使用する (かっこで囲まれた) 値リストをコンマで区切って入力します。 たとえば、「IN (2007, 2008, 2009, 2010)」と入力すると、2007、2008、2009、2010 という 4 つの列見出しが生成されます。
pivot フィールドのフィールド値と一致しない固定値を指定すると、その固定値は、空の列の列見出しになります。
-
クロス集計クエリの SQL ビューの FROM 句の後に新しい行を挿入します。
-
「WHERE」と入力して、その後にフィールドの抽出条件を入力します。
追加の条件を使用する場合は、AND 演算子と OR 演算子を使って、WHERE 句を拡張できます。 また、かっこを使って、条件を論理セットにグループ化することもできます。
行見出しまたは列見出しのそれぞれの値を使う代わりに、フィールド値を範囲でグループ化して、その範囲を行見出しまたは列見出しで使用する場合があります。 たとえば、列見出しに "年齢" フィールドを使用するとします。 そのような場合は、それぞれの年齢の列を使用するよりも、年齢層を表す列を使用する方が適しています。
式で IIf 関数を使用することにより、行または列の見出しに使用する範囲を作成できます。
ヒント: 日付/時刻フィールドで期間を作成する場合は、クロス集計クエリ ウィザードの使用を検討してください。 ウィザードを使用すると、日付を [年]、[四半期]、[月]、[日]、[日付/時刻] の期間にグループ化できるようになります。 これ以外の期間が必要な場合は、デザイン ビューでクロス集計クエリを作成し、このセクションで説明する手法を使用して、必要な期間を作成する必要があります。
-
デザイン ビューでクロス集計クエリを開きます。
-
クエリ デザイン グリッドの [フィールド] 行で、空白の列を右クリックし、ショートカット メニューの [ズーム] をクリックします。
-
[ズーム] ボックスに、フィールドの別名と、その後にコロン (:) を入力します。
-
「IIf()」と入力します。
-
IIf の後に続くかっこの中に、フィールド値の 1 つ目の範囲を定義する比較式を入力します。
たとえば、"年齢" フィールドの範囲を作成していて、各範囲を 20 歳にするとします。 最初の範囲の比較式は [年齢]<21 です。
-
比較式の後にカンマを入力し、範囲の名前を引用符で囲んで入力します。 指定する名前は、その範囲にある値のクロス集計の見出しになります。
たとえば、[年齢]<21 の後にカンマを入力し、次に「"0 ~ 20 歳"」と入力します。
-
範囲名の後 (引用符の外側) にカンマを入力して、次のいずれかの操作を行います。
-
別の範囲を作成するには、「IIf()」と入力して、手順 5、6、7 を繰り返します。
-
最後の範囲には、範囲の名前のみを入力します。
たとえば、"年齢" フィールドを 20 歳の範囲に区切る、完全に入れ子になった IIf 式は、次のようになります (読みやすいように改行が追加されています)。
IIf([Age]<21,"0-20 years", IIf([Age]<41,"21-40 years", IIf([Age]<61,"41-60 years", IIf([Age]<81,"61-80 years", "80+ years"))))
注: 式の評価は、IIf ステートメントのいずれかが True と評価されると、すぐに中止されます。 それぞれの範囲の下限を指定する必要はありません、指定された範囲を下回る値はすべて True と評価されるためです。
-
-
クエリ デザイン グリッドの [集計] 行で [グループ化] をクリックします。
-
[クロス集計] 行で、範囲を行見出しまたは列見出しとして使用するかどうかを指定します。 行見出しは 1 つから 3 つ、列見出しは 1 つ指定することができます。
クロス集計クエリの実行時に入力を求めるようにしたい場合があります。 たとえば、複数の行見出しを使用していて、その 1 つが [国/地域] であるとします。 その場合、すべての国または地域のデータを毎回表示するよりも、クエリで名前の入力を求め、ユーザーの入力に従ってデータを表示することができます。
任意の行見出しフィールドにパラメーター プロンプトを追加することができます。
注: 列見出しフィールドにパラメーター プロンプトを追加することもできますが、これによって表示される列を制限することはできません。
-
デザイン ビューでクロス集計クエリを開きます。
-
ユーザーの入力を求める行見出しフィールドの [抽出条件] 行に、質問文を角かっこで囲んで入力します。 質問文はクエリの実行時にプロンプトとして表示されます。
たとえば、[抽出条件] 行に、「[国または地域を入力してください。]」と入力すると、クエリが実行されたときにダイアログ ボックスが表示され、その中に "国または地域を入力してください。" という質問、入力ボックス、および [OK] ボタンが表示されます。
ヒント: パラメーターを柔軟にする場合は、 Like 演算子を使用して、式をワイルドカードで連結します。 たとえば、[ どの国 または地域ですか?] を 基準として使用する代わりに、[ どの国または地域か] のように使用できます。&"*" を使用して、パラメーターをより広い入力範囲に一致させます。 Like を使用しても、パラメーター プロンプトの外観は変更されません。
-
[デザイン] タブの [表示/非表示] で [パラメーター] をクリックします。
-
[クエリ パラメーター] ダイアログ ボックスの [パラメーター] 列に、[抽出条件] 行で使用したのと同じパラメーター プロンプトを入力します。 角かっこも含めますが、連結したワイルドカードや Like 演算子は含めないでください。
-
[データ型] 列で、各パラメーターのデータ型を選択します。 このデータ型は、行見出しフィールドのデータ型と一致する必要があります。
クロス集計クエリの集計値を計算するために使用するフィールドに NULL 値が含まれている場合、その値は使用するすべての集計関数で無視されます。 一部の集計関数では、結果に影響が出る可能性があります。 たとえば、平均を計算するには、すべての値を加算し、その結果を値の数で除算します。 ただし、フィールドに NULL 値が含まれている場合、その NULL 値は、値の数にカウントされません。
場合によっては、集計計算で値がカウントされるように、すべての NULL 値をゼロに置き換える方が望ましいこともあります。 NULL 値をゼロに置き換えるには、Nz 関数を使用します。
Nz 構文
Nz ( variant [, valueifnull ] )
Nz 関数の構文には、次の引数があります。
引数 |
説明 |
variant |
必須。 データ型 Variant の変数です。 |
valueifnull |
オプション (クエリで使用されている場合を除く)。 variant 引数が NULL の場合に返す値を提供する Variant です。 この引数を使用すると、0 または長さが 0 の文字列以外の値を返すことができます。 注: 引数 valueifnull を使用せずに、クエリの式で Nz 関数を使用すると、NULL 値を含むフィールドは長さが 0 の文字列になります。 |
-
デザイン ビューでクエリを開いた状態で、クエリ デザイン グリッドの "値" フィールドを右クリックします。
-
ショートカット メニューの [ズーム] をクリックします。
-
[ズーム] ボックスで、フィールド名または式をかっこで囲み、かっこの前に「Nz」と入力します。
-
右かっこの直前に「, 0」と入力します。
たとえば、Nz と "失われた時間" という名前のフィールドを使用して NULL 値をゼロに変換する場合、入力する式は次のようになります。
Nz([Hours Lost], 0)
-
簡潔に記述する クロス集計クエリは、行の組み合わせ数が増えると読みにくくなる可能性があります。 必要以上に行見出しを使用しないでください。
-
手順を追ってクロス集計を作成することを検討する テーブルのみを使おうとして考えを限定しないでください。 集計クエリを作成し、そのクエリをクロス集計クエリのレコード ソースとして使用して開始することもできます。
-
列見出しフィールドは慎重に選択する クロス集計データシートは、列見出しの数が比較的少ない方が読みやすくなります。 見出しとして使用するフィールドを確認したら、列見出しとして作成される値が最も少ないフィールドを選択します。 たとえば、クエリで年齢と性別による値を計算する場合、通常、性別の方が年齢よりも値が少ないため、年齢ではなく性別を列見出しに使用します。
-
WHERE 句でサブクエリを使用する クロス集計クエリでは、WHERE 句の一部としてサブクエリを使用できます。