クエリでの複数値を持つフィールドの使用

Microsoft Office Access 2007 では、案件を割り当てた担当者のリストなど、複数の値を保持するフィールドを作成できます。複数値を持つフィールドは、Office Access 2007 を使用して Windows SharePoint Services 3.0 のリストに格納されている情報を処理する場合や、そのリストに Windows SharePoint Services 3.0 で使用できるいずれかの種類の複数値を持つフィールドを含める場合などの、特定の状況に適しています。

ここでは、複数値を持つフィールドの概要と、クエリで複数値を持つフィールドを使用する方法について説明します。

この記事の内容

複数値を持つフィールドとは

クエリについて

複数値を持つフィールドをクエリで表示する

複数値を持つフィールドの個々の値を表示する

ルックアップ フィールドの連結値と表示値を理解する

連結値をクエリで表示する方法

複数値を持つフィールドに簡単なクエリの抽出条件を入力する

複数値を持つフィールドの複数の値を検索する

フィールド リストに .Value フィールドを含めたときの効果を理解する

他の集計関数をカウント、グループ化、および使用する

複数値を持つフィールドで追加クエリを使用する

複数値を持つフィールドで更新クエリを使用する

複数値を持つフィールドで削除クエリを使用する

ページの先頭へ

複数値を持つフィールドとは

通常は社員または受託業者の 1 人に割り当てる 1 つの仕事を、必要により複数の担当者に割り当てるとします。Office Access 2007 では、複数値を持つフィールドを作成し、リストから担当者を選択することができます。

複数値フィールド

コンボ ボックスをクリックすると、選択内容を示すチェック ボックスが表示されます。リストの項目をオンまたはオフにして [OK] をクリックすると、選択内容を送信できます。

複数値フィールド コンボ ボックス

選択した担当者は、複数値を持つフィールド内に格納され、既定ではコンマ区切りの形式で表示されます。

値をカンマで区切った複数値フィールド

複数値を持つフィールドの背景には、高度なデザインのデータベースを作成することなく、複数のオプションを選択し、格納するインスタンスをサポートしやすくするという考えがあります。Windows SharePoint Services の SharePoint リストも複数値を持つフィールドをサポートすることから、Windows SharePoint Services との統合でも、複数値を持つフィールドが重要な役割を果たします。

ほとんどのリレーショナル データベース管理システムでは、1 つのフィールドに複数の値を格納することが禁止されているのに、なぜ Office Access 2007 ではこの処理が可能なのでしょうか。その答えは、データベース エンジンにあります。Office Access 2007 のデータベース エンジンは、実際には、複数の値を 1 つのフィールドに格納しているのではなく、非表示のシステム テーブルに個別に格納し、管理しています。データを分割し、分割したデータを再度まとめて 1 つのフィールドに表示する処理は、Access データベース エンジンで自動的に行われます。

技術的な面について説明すると、Access の複数値を持つフィールドは、多対多のリレーションシップをモデルにしています。たとえば、各イベントに複数の担当者を割り当てるようなイベント テーブルがあるとします。複数値を持つフィールド "AssignedTo" を作成して、イベントを複数の担当者に割り当てるとすると、イベントと担当者のリレーションシップは多対多になります。つまり、1 つのイベントに複数の担当者を割り当てることもできれば、1 名の担当者に複数のイベントを任せることもできます。

ページの先頭へ

クエリについて

データベースは主に、最も売れている製品、最も売り上げの多い得意先、販売目標を達成していない分野などの情報を提供する目的で用意されます。適切に設計されているデータベースからこれらの情報を取得する場合、すべてを質問形式で行います。Access データベースから回答を取得するには、クエリを作成して必要な抽出条件を入力します。クエリのデータは、1 つ以上のテーブルから取得できます。質問に対する回答のデータを取得した後、そのデータを表示したり分析したりできます。1 つのクエリを作成すると、そのクエリをフォーム、レポート、グラフ、または他のクエリの基礎として使用できます。

Office Access 2007 では、特定のクエリおよび特定の方法で複数値を持つフィールドを使用できます。クエリでの複数値を持つフィールドの表示、クエリでの複数値を持つフィールドの個々の値の表示、および複数値を持つフィールドを使用した特定の選択項目の集計操作とアクション クエリの実行が可能です。

ページの先頭へ

複数値を持つフィールドをクエリで表示する

複数値を持つフィールドをクエリで表示する場合は、すべての値がコンマ区切り形式で格納されている複数値を持つフィールド全体を表示するか、値ごとに別々の行として表示するかを決定する必要があります。たとえば、担当者に案件を割り当てるために使用する AssignedTo フィールドを持つ Issues テーブルがあるとします。次の手順を実行すると、AssignedTo フィールドが含まれたクエリを作成できます。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールドをクエリ デザイン グリッドにドラッグします。この例では、Title フィールドと複数値を持つ AssignedTo という名前のフィールドをクエリ グリッドにドラッグします。

  7. [デザイン] タブの [結果] で [実行] をクリックします。

クエリの結果は、次の図のようになり、1 列目に案件のタイトル、2 列目に複数値を持つフィールドが表示されます。

[タイトル] と [担当者] のフィールドが表示されているクエリ結果

デザイン ビューを使用してクエリを作成すると、そのクエリに対応する SQL (構造化照会言語) ステートメントが自動的に作成されます。SQL は、Access で使用されるクエリ言語です。次の手順を実行すると、SQL ビューに切り替えて SQL ステートメントを表示できます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.Title, 
Issues.AssignedTo
FROM Issues;

ページの先頭へ

複数値を持つフィールドの個々の値を表示する

複数値を持つ AssignedTo フィールドを展開して (フラット化とも呼ばれます)、それぞれの名前または AssignedTo 値を別々の行に表示するとします。このためには、クエリ グリッドで、[フィールド] 行の "AssignedTo" に文字列 ".Value" を付加して、"値" プロパティを指定する必要があります。

タイトルと担当者の値が表示されたクエリ グリッド

[フィールド] 行に AssignedTo を指定すると、クエリを実行したとき、複数値を持つフィールド内のすべての値が 1 行で表示されるようになります。一方、AssignedTo.Value のような "値" プロパティを使用すると、展開された形式で複数値を持つフィールドが表示され、クエリ グリッド内のそれぞれの値が別々の行に表示されます。次の手順に従ってクエリを作成すると、個々の値を表示できます。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールド (この例では、複数値を持つ "AssignedTo.Value" フィールド) をクエリ グリッドへドラッグします。

  7. [デザイン] タブの [結果] で [実行] をクリックします。

タイトルと個々の [担当者] の値を示すクエリの結果

デザイン ビューを使用してクエリを作成すると、そのクエリに対応する SQL (構造化照会言語) ステートメントが自動的に作成されます。SQL は、Access で使用されるクエリ言語です。次の手順を実行すると、SQL ビューに切り替えて SQL ステートメントを表示できます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.Title, 
Issues.AssignedTo.Value
FROM Issues;

ページの先頭へ

ルックアップ フィールドの連結値と表示値を理解する

複数値を持つフィールドはルックアップ フィールドです。ルックアップ フィールドは、別のテーブルやクエリ、または値リストから取得した値が格納される、テーブル内のフィールドです。Access はこれまでの多くのバージョンで単一の値を持つルックアップ フィールドをサポートしていました。複数値を持つルックアップ フィールドは、Office Access 2007 の新機能です。ルックアップ フィールドの目的は、ID などの番号 (またはその他の外部キーの値) の表示を名前などの意味のある内容に置き換えることにあります。たとえば、担当者 ID 番号を表示する代わりに、担当者名を表示できます。この場合の担当者 ID 番号は連結値です。この値を使用してソース テーブルやクエリが自動的に検索され、担当者名に置き換えられます。この担当者名は表示値です。

表示値と連結値を持つ単一値のルックアップ フィールドと同様に、複数値を持つルックアップ フィールドも、ユーザー インターフェイスに表示する表示値と、テーブルに格納する連結値を持っています。複数値を持つフィールドの各エントリについて、その連結値に基づき表示値が検索されます。

これは、複数値を持つフィールドに格納されている連結値ではなく検索された表示値が表示される場合があることを示します。たとえば、AssignedTo フィールドを使用する前の例では、Contacts Extended クエリから取得する一連の従業員 ID の値が、AssignedTo フィールドに格納されます。Contacts Extended クエリは、複数値を持つフィールドを作成するときに値集合ソースとして選択しました。

これらの従業員 ID は連結値です。一方、AssignedTo フィールドはルックアップ フィールドであるため、クエリ結果の一連の検索された値として担当者名が表示されます。この担当者名が表示値です。

表示値のデータシートと連結値のデータシート

1. 表示値。

2. 連結値。

デザイン ビューでは、複数値を持つフィールドの "ルックアップ" プロパティを表示できます。次の手順を実行します。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. ナビゲーション ウィンドウで、複数値を持つフィールドが格納されているテーブルを右クリックします。

  4. [デザイン ビュー] をクリックします。

  5. 複数値を持つフィールド (たとえば、AssignedTo) をクリックします。

  6. [フィールド プロパティ] で、[ルックアップ] タブをクリックします。

複数値を持つルックアップ フィールドのプロパティ

ルックアップ フィールドの表示値と連結値の違いを理解することが大切です。既定では、表示値がデータシート ビューに自動的に表示されます。一方、フィールドに格納され、クエリの抽出条件に使用され、他のテーブルとの結合に既定で使用されるのは連結値です。

ページの先頭へ

連結値をクエリで表示する方法

既定では、表示値がデータシート ビューに自動的に表示されます。クエリを作成すると、この動作を無効にして、代わりに連結値を表示できます。連結値を表示するクエリの作成手順を次に示します。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールドをクエリ デザイン グリッドにドラッグします。この例では、Title フィールドと複数値を持つ AssignedTo.Value という名前のフィールドをクエリ グリッドにドラッグします。

  7. クエリ グリッド内の AssignedTo.Value フィールドをクリックし、このフィールドにフォーカスを置きます。

  8. [デザイン] タブの [表示/非表示] で [プロパティ シート] をクリックします。

  9. プロパティ シートで、[ルックアップ] タブの "DisplayControl/表示コントロール" プロパティの [テキスト ボックス] を選択します。

クエリ デザインの表示コントロールのプロパティ

"DisplayControl/表示コントロール" プロパティを [テキスト ボックス] に変更すると、通常のルックアップ列の動作が無効になり、表示値の代わりに連結値が表示されます。

クエリ結果に表示されたバインド値

ページの先頭へ

複数値を持つフィールドに簡単なクエリの抽出条件を入力する

"友野 司郎" に割り当てられた案件を表示するとします。クエリ グリッドの [抽出条件] 行にクエリの抽出条件を入力できますが、ルックアップ フィールドの抽出条件を入力する場合は、表示値ではなく連結値を入力する必要があります。この例の場合、友野 司郎の連結値が 6 であることを確認します。これが、Contacts Extended クエリで友野に対応する主キーの値です。

友野に割り当てられた案件を表示するクエリを作成するには、次の操作を行います。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールドをクエリ グリッドにドラッグします。この例では、Title フィールドをグリッドの最初の列にドラッグします。次に、AssignedTo フィールドを 2 番目の列にドラッグします。

  7. クエリ グリッドのタブで、AssignedTo フィールドの [抽出条件] 行に、「6」と入力します。ここで入力するのは、表示値ではなく連結値です。

    複数値フィールドに条件のあるクエリ グリッド

  8. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

クエリを実行すると、結果がデータシート ビューに表示されます。このクエリでは、"友野 司郎" が格納されている行のみが取得されます。

AssignedTo の値に 6 が含まれるクエリ結果

デザイン ビューを使用してクエリを作成すると、そのクエリに対応する SQL (構造化照会言語) ステートメントが自動的に作成されます。SQL は、Access で使用されるクエリ言語です。次の手順を実行すると、SQL ビューに切り替えて SQL ステートメントを表示できます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.AssignedTo
FROM Issues
WHERE (((Issues.AssignedTo.Value)=6));

ID 番号の代わりにテキストを検索する

ID 番号を入力することが困難で、検索値として "友野 司郎" を入力したい場合には、どうしたらよいでしょうか。このクエリを実行するには、クエリ結果にテキストの名前が格納されるフィールドを用意する必要があります。これにより、そのフィールド内の "友野 司郎" を検索できます。

AssignedTo.Value フィールドの連結値は ID でありそのまま使用できないため、ID を入力してそのフィールドをフィルタ処理する必要があります。

この例では、テーブル内に担当者名フィールドがありません。代わりに、複数値を持つ AssignedTo フィールドのデータが提供されるソース クエリにこのフィールドがあります。複数値を持つフィールド用のソース テーブルまたはソース クエリを、複数値を持つフィールドがあるテーブルに結合することにより、ソース テーブルまたはソース クエリのフィールド (この例では担当者名) をクエリの結果に格納することができます。これにより、複数値を持つフィールドではなく担当者名のフィールドを検索できます。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [テーブルの表示] ダイアログ ボックスで、[クエリ] タブをクリックし、複数値を持つフィールドのソースとして使用するクエリ (この例では "Contacts Extended") をクリックします。次に、[追加] をクリックします。

  6. [閉じる] をクリックします。

  7. 使用するフィールドをクエリ グリッドにドラッグします。この例では、Issues テーブルからグリッドの最初の列に Title フィールドをドラッグします。次に、Contacts Extended クエリから 2 番目の列に Contact Name フィールドをドラッグし、[表示] チェック ボックスをオフにします。最後に、AssignedTo フィールドを 3 番目の列にドラッグします。

  8. Contacts Extended クエリの ID フィールドと AssignedTo.Value フィールドの間に、次に示すような結合線が表示されない場合は、Contacts Extended クエリの ID フィールドをクリックし、Issues テーブルの AssignedTo.Value フィールドまでドラッグします。

    結合線が表示されます。

    これ以外の結合線が表示されている場合は、それを削除します。結合線を削除するには、その結合線をクリックして強調表示し、Del キーを押します。

  9. クエリ グリッドで、Contact Name フィールドの [抽出条件] 行に、「"友野 司郎"」と入力します。

    "Kelly Rollin" が含まれる AssignedTo 条件を使用するクエリ グリッド

  10. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

クエリを実行すると、結果がデータシート ビューに表示されます。このクエリの結果には、"友野 司郎" が格納されている行のみが表示されます。この方法が有効な理由は、ソース テーブルまたはソース クエリの ID と AssignedTo.Value フィールドを結合することにより、複数値を持つフィールドのそれぞれの値の個別の行が取得され、それぞれの行に Contact Name フィールドの氏名も格納されるためです。Contact Name フィールドはルックアップ フィールドではなく集計フィールドであるため、連結値と表示値はありません。あるのは、担当者名の値のみです。このため、照合するためのテキスト、この例では "友野 司郎" を指定できます。

[AssignedTo] に "友野 司郎" を含むクエリ結果

デザイン ビューを使用してクエリを作成すると、そのクエリに対応する SQL (構造化照会言語) ステートメントが自動的に作成されます。SQL は、Access で使用されるクエリ言語です。次の手順を実行すると、SQL ビューに切り替えて SQL ステートメントを表示できます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.Title, Issues.AssignedTo 
FROM [Contacts Extended] INNER JOIN Issues ON
[Contacts Extended].ID = Issues.AssignedTo.Value
WHERE ((([Contacts Extended].[Contact Name])=
"友野 司郎"));

ページの先頭へ

複数値を持つフィールドの複数の値を検索する

場合によっては、複数の値が一致するフィールドの検索が必要になることがあります。たとえば、AssignedTo フィールドの値に "友野 司郎" と "根本 明美" の両方がある案件を表示するとします。友野 司郎の連結値は 6 で、根本 明美の連結値は 10 です。複数値を持つフィールドにいくつかの抽出条件を指定するには、AND 演算子と OR 演算子を使用できます。

クエリを作成するには、次の手順を実行します。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールドをクエリ グリッドにドラッグします。この例では、Title フィールドをグリッドの最初の列にドラッグします。次に、AssignedTo フィールドを 2 番目の列にドラッグします。

  7. クエリ グリッドで、AssignedTo フィールドの [抽出条件] 行に「6 And 10」と入力します。

    複数値フィールドで AND の使用を示すクエリ

  8. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

クエリを実行すると、結果がデータシート ビューに表示されます。

複数値フィールドで AND の使用を示すクエリ結果

結果には、友野 司郎と根本 明美の両方が割り当てられている案件のみが表示されます。デザイン ビューを使用してクエリを作成すると、そのクエリに対応する SQL (構造化照会言語) ステートメントが自動的に作成されます。SQL は、Access で使用されるクエリ言語です。次の手順を実行すると、SQL ビューに切り替えて SQL ステートメントを表示できます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.Title, Issues.AssignedTo
FROM Issues
WHERE (((Issues.AssignedTo.Value)=6
And (Issues.AssignedTo.Value)=10));

AND 演算子の代わりに OR 演算子を使用する

前のクエリを変更して、"友野 司郎" または "根本 明美" が格納されている行を一覧表示するとします。AND 演算子の代わりに OR 演算子を使用するように SQL ステートメントを編集します。この SQL ステートメントは次のようになります。

SELECT Issues.Title, Issues.AssignedTo
FROM Issues
WHERE (((Issues.AssignedTo.Value)=6
Or (Issues.AssignedTo.Value)=10));

クエリを実行すると、結果がデータシート ビューに表示されます。

複数値フィールドで Or 演算子を使うクエリ

結果には、友野 司郎と根本 明美のいずれかが割り当てられている案件のみが表示されます。

ページの先頭へ

フィールド リストに .Value フィールドを含めたときの効果を理解する

クエリの出力列のリスト (SELECT リスト) に .Value フィールドを含めたときの効果を理解することが大切です。クエリを処理すると、最初の手順で、WHERE 句またはフィルタが適用されていない結果セットが作成されます。次に、その最初の結果セットにフィルタが適用されます。このため、最初に作成された結果セットが、WHERE 句でフィルタを適用して絞り込まれると考えることができます。たとえば、次の例について検討してみます。

SELECT Issues.Title, AssignedTo
FROM Issues
WHERE NOT AssignedTo.Value = 3;

フィルタ処理する前の最初の結果セットは次のようになります。

Title

AssignedTo

案件 1

阿部 信夫, 江田 真理子

案件 2

鈴崎 礼子, 友野 司郎, 藤巻 陽子, 根本 明美

案件 3

河崎 聖一, 友野 司郎, 江田 真理子, 村中 真人

案件 4

山越 美樹, 根本 明美

案件 5

阿部 信夫, 鈴崎 礼子

案件 6

田山 雄一, 友野 司郎

案件 7

河崎 聖一, 藤巻 陽子

案件 8

阿部 信夫

案件 9

友野 司郎, 根本 明美

案件 10

江田 真理子, 村中 真人

次に、最初の結果セットをフィルタ処理し、ID が 3 の阿部 信夫が含まれていない行を選択します。

Title

AssignedTo

案件 2

鈴崎 礼子, 友野 司郎, 藤巻 陽子, 根本 明美

案件 3

河崎 聖一, 友野 司郎, 江田 真理子, 村中 真人

案件 4

山越 美樹, 根本 明美

案件 6

田山 雄一, 友野 司郎

案件 7

河崎 聖一, 藤巻 陽子

案件 9

友野 司郎, 根本 明美

案件 10

江田 真理子, 村中 真人

ここで、2 番目の例として、フィールド リストに .Value フィールドが含まれている場合について検討してみます。まず、.Value フィールドがあることにより、フィルタ処理する前の最初の結果セットがどのように変わるかを確認します。

SELECT Issues.Title, AssignedTo.Value
FROM Issues
WHERE NOT AssignedTo.Value = 3;

フィルタ処理する前の最初の結果セットは次のようになります。

Title

AssignedTo.Value

案件 1

阿部 信夫

案件 1

江田 真理子

案件 2

鈴崎 礼子

案件 2

友野 司郎

案件 2

根本 明美

案件 2

藤巻 陽子

案件 3

江田 真理子

案件 3

河崎 聖一

案件 3

友野 司郎

案件 3

村中 真人

案件 4

根本 明美

案件 4

山越 美樹

案件 5

阿部 信夫

案件 5

鈴崎 礼子

案件 6

友野 司郎

案件 6

田山 雄一

案件 7

河崎 聖一

案件 7

藤巻 陽子

案件 8

阿部 信夫

案件 9

友野 司郎

案件 9

根本 明美

案件 10

村中 真人

案件 10

江田 真理子

次に、最初の結果セットをフィルタ処理し、ID が 3 の阿部 信夫が含まれていない行のみを選択します。

Title

AssignedTo.Value

案件 1

江田 真理子

案件 2

鈴崎 礼子

案件 2

友野 司郎

案件 2

根本 明美

案件 2

藤巻 陽子

案件 3

江田 真理子

案件 3

河崎 聖一

案件 3

友野 司郎

案件 3

村中 真人

案件 4

根本 明美

案件 4

山越 美樹

案件 5

鈴崎 礼子

案件 6

友野 司郎

案件 6

田山 雄一

案件 7

河崎 聖一

案件 7

藤巻 陽子

案件 9

友野 司郎

案件 9

根本 明美

案件 10

村中 真人

案件 10

江田 真理子

フィルタを適用する前と後の結果セットを表示すると、正しいクエリ結果が得られたことが簡単にわかります。

ページの先頭へ

他の集計関数をカウント、グループ化、および使用する

複数値を持つフィールドに格納されている値のグループに対して計算を実行できます。たとえば、各担当者に割り当てられている案件の数や各案件に割り当てられている担当者の数を計算できます。このような計算を実行するには、集計クエリで集計関数を使用します。

集計関数は値のセットに対して計算を実行し、単一の値を返します。たとえば、Sum、Count、および Avg の 3 つの集計関数は、集計値の計算に使用できます。すべてのレコードまたはレコードのグループに対して集計値の計算を行うことができます。グループ別にまとめるには、グループ化するフィールドをクエリ グリッドで選択する必要があります。

次の手順は、各担当者に割り当てられている案件の数をカウントするクエリの作成方法を示しています。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールドをクエリ グリッドにドラッグします。この例では、AssignedTo.Value フィールドをグリッドの最初の列にドラッグします。次に、Title フィールドを 2 番目の列にドラッグします。

  7. [デザイン] タブの [表示/非表示] で [集計] をクリックします。

    クエリ グリッドに [集計] 行が表示されます。既定では、クエリの各フィールドの [集計] セルに [グループ化] が表示されます。

  8. クエリ グリッドで、Title フィールドの下にある [集計] 行の [カウント] をクリックします。

  9. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

クエリをデザインするときに、グループ化に使用するフィールドおよび集計 (計算) に使用するフィールドを指定します。この例では、AssignedTo.Value はグループ化に使用するフィールドで、Title は集計の計算に使用するフィールドでした。グループ化に使用するフィールドの場合、[集計] 行で [グループ化] を選択します。集計の計算に使用するフィールドの場合は、計算の種類 ([合計]、[平均] など) を選択します。複数値を持つフィールドをグループ化に使用する場合は、.Value フィールドを使用する必要があります。この例では、AssignedTo フィールドではなく、AssignedTo.Value フィールドをグループ化に使用する必要があります。また、複数値を持つフィールドを並べ替えに使用する場合も .Value フィールドを使用する必要があります。

注: 複数値を持つフィールドをグループ化に使用する場合、.Value フィールドを使用する必要があります。複数値を持つフィールドを並べ替えに使用する場合、.Value フィールドを使用する必要があります。

クエリを実行すると、結果がデータシート ビューに表示されます。

各人に割り当てられた問題をカウントするクエリ

このクエリの SQL ステートメントを表示するには、次の手順を実行して SQL ビューに切り替えます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.AssignedTo.Value, 
Count(Issues.Title) AS CountOfTitle
FROM Issues
GROUP BY Issues.AssignedTo.Value;

各案件に割り当てられている担当者の数を調べるとします。Title を使用してグループ化し、複数値を持つフィールドの計算方法として [カウント] を選択します。このクエリを作成するには、次の手順を実行します。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスで、複数値を持つフィールドを含むテーブル (この例の場合、"Issues" テーブル) をクリックし、[追加] をクリックします。

  5. [閉じる] をクリックします。

  6. 使用するフィールドをクエリ グリッドにドラッグします。この例では、Title フィールドをグリッドの最初の列にドラッグします。次に、AssignedTo フィールドを 2 番目の列にドラッグします。

  7. [デザイン] タブの [表示/非表示] で [集計] をクリックします。

    クエリ グリッドに [集計] 行が表示されます。既定では、クエリの Title フィールドの [集計] セルに [グループ化] が表示されます。複数値を持つフィールドに対してはグループ化操作を実行できないため、AssignedTo フィールドの [集計] セルには既定で [] が表示されます。グループ化は、複数値を持つ .Value フィールドに対してのみ実行できます。

  8. クエリ グリッドで、AssignedTo フィールドの下にある [集計] 行の [カウント] をクリックします。

  9. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

クエリを実行すると、結果がデータシート ビューに表示されます。

案件当たりのユーザー数を示すクエリ結果

このクエリの SQL ステートメントを表示するには、次の手順を実行して SQL ビューに切り替えます。

  1. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  2. [SQL ビュー] をクリックします。

SQL ステートメントは次のようになります。

SELECT Issues.Title, 
Count(Issues.AssignedTo) AS CountOfAssignedTo
FROM Issues
GROUP BY Issues.Title;

注: この SQL SELECT ステートメントでは、Count(Issues.AssignedTo) と Count(Issues.AssignedTo.Value) のいずれを使用しても結果は同じです。

ページの先頭へ

複数値を持つフィールドで追加クエリを使用する

挿入クエリを使用すると、複数値を持つフィールドに単一の値を挿入できます。たとえば、案件用の複数値を持つ AssignedTo フィールドに "友野 司郎" を追加するとします。最初に、その案件と友野 司郎の担当者レコードの主キーの値を確認します。案件の値が 10 で友野の値は 6 だとします。

次の手順は、このクエリの作成方法を示しています。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

    Access のリボンの画像

  4. [テーブルの表示] ダイアログ ボックスの [閉じる] をクリックします。

  5. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  6. [SQL ビュー] をクリックします。

  7. SQL ビューで、次の SQL ステートメントを入力します。

    INSERT INTO Issues ( AssignedTo.[Value] )
    VALUES (6)
    WHERE ID = 10;
  8. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

    選択した行を追加するかどうかを確認するメッセージが表示されます。[はい] をクリックして行を挿入するか、または [いいえ] をクリックしてキャンセルします。

指定した案件の AssignedTo フィールドのリストに友野が表示されます。この挿入クエリの形式でのみ、複数値を持つフィールドを処理できます。

注: 追加クエリは、1 つのテーブルから別の既存のテーブルにレコードを追加する場合に使用するクエリです。Office Access 2007 では、複数値を持つフィールドが含まれているテーブルを参照する追加クエリは使用できません。たとえば、次のクエリは無効です。

INSERT INTO [NewIssues] ( ID, Title, AssignedTo ) SELECT Issues.ID, Issues.Title, Issues.AssignedTo FROM Issues;

ページの先頭へ

複数値を持つフィールドで更新クエリを使用する

更新クエリを使用すると、既存のレコードの値を変更できます。更新クエリを使用して複数値を持つフィールドが含まれているテーブルを更新すると、複数値を持つフィールド内の 1 つの値を別の値に変更できます。特定の案件の複数値を持つ AssignedTo フィールドで、たとえば "友野 司郎" を "根本 明美" に置き換えるとします。最初に、その案件および友野と根本の担当者レコードの主キーの値を確認します。案件の値が 8、友野の値が 6、根本の値が 10 だとします。

次の手順は、このクエリの作成方法を示しています。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

  4. [テーブルの表示] ダイアログ ボックスの [閉じる] をクリックします。

  5. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  6. [SQL ビュー] をクリックします。

  7. SQL ビューで、次の SQL ステートメントを入力します。

    UPDATE Issues 
    SET Issues.AssignedTo.Value = 10
    WHERE (((Issues.AssignedTo.Value)=6)
    AND ((Issues.ID)=8));

    注記: 

    • 更新するレコードのみを識別する WHERE 句を常に含める必要があります。WHERE 句がないと、変更する必要のないレコードも更新されます。WHERE 句が含まれていない変更クエリは、テーブル内のすべての行を変更します。

    • 変更する 1 つの値を指定できます。

  8. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

    レコードを変更するかどうかを確認するメッセージが表示されます。[はい] をクリックして行を変更するか、または [いいえ] をクリックしてキャンセルします。

指定した案件の AssignedTo フィールドで、友野 司郎が根本 明美に置き換えられます。

ページの先頭へ

複数値を持つフィールドで削除クエリを使用する

削除クエリを使用すると、テーブルからレコードを削除できます。複数値を持つフィールドが含まれているテーブルを処理する場合、削除クエリを使用すると、複数値を持つフィールド内に特定の値が含まれているレコードを削除したり、テーブル内のすべてのレコードについて、複数値を持つフィールドから特定の値を削除したりできます。

テーブルのすべての AssignedTo フィールドから "友野 司郎" を削除するとします。次の手順を実行して、クエリを作成します。

  1. Office ボタンのイメージ (Microsoft Office ボタン) をクリックし、[開く] をクリックします。

  2. [ファイルを開く] ダイアログ ボックスで、データベースを選択して開きます。

  3. [作成] タブの [その他] で [クエリ デザイン] をクリックします。

  4. [テーブルの表示] ダイアログ ボックスの [閉じる] をクリックします。

  5. [デザイン] タブの [結果] で、[ビュー] の下にある矢印をクリックし、[ビュー] メニューを表示します。

  6. [SQL ビュー] をクリックします。

  7. SQL ビューで、次の SQL ステートメントを入力します。

    DELETE Issues.AssignedTo.Value
    FROM Issues
    WHERE (((Issues.AssignedTo.Value)=6));
  8. [デザイン] タブの [結果] で [実行] をクリックして、クエリを実行します。

    レコードを削除するかどうかを確認するメッセージが表示されます。[はい] をクリックしてレコードを削除するか、または [いいえ] をクリックしてキャンセルします。

次の例のクエリは、Issues テーブルからレコードを削除しません。このクエリは、ある値が格納されている各レコードについて、複数値を持つ AssignedTo フィールドからその値を削除します。Issues テーブルからレコードを削除する場合は、SQL ステートメントの DELETE 句の後にフィールドを指定しません。たとえば、割り当てられた担当者に "友野 司郎" が含まれている案件をすべて削除するには、次の SQL ステートメントを入力します。

DELETE 
FROM Issues
WHERE (((Issues.AssignedTo.Value)=6));

注: 削除クエリを使用してレコードを削除するときは、細心の注意を払ってください。いったんレコードを削除すると、そのレコードを復元することはできません。

ページの先頭へ

スキルを磨く
トレーニングの探索
新機能を最初に入手
Office Insider に参加する

この情報は役に立ちましたか?

ご意見をいただきありがとうございます。

フィードバックをお寄せいただき、ありがとうございます。Office サポートの担当者におつなぎいたします。

×