次の方法で共有

クエリの重複する出力結果を一行にまとめたい。

Anonymous
2015-11-27T09:33:56+00:00

よろしくお願いいたします。

タイトルの通り、クエリの重複する結果を一行にまとめる方法を知りたく伺います。

可能な処理なのかわかりませんが、お知恵を拝借させていただきますと幸いです。

◎作成しているDB概要:

ある組織の業務内容を管理するDBです。

業務内容テーブル、作業者マスタの二つのテーブルで構成されています。

業務内容テーブルには、「業務名」と、「主担当」「副担当」フィールドがあります。

業務内容テーブルは主担当、副担当を作業者マスタから参照(リレーション)します。

また、副担当フィールドはAccessの機能で「複数値フィールド」を用いて、

データの入力を行っています。

◎テーブル定義:

【業務内容テーブル】

[フィールド名] [データ型]

業務内容ID オートナンバー型※主キー

業務内容名 テキスト型

主担当 数値型※リレーション有,作業者マスタ[作業者ID]と多対一

副担当 数値型※リレーション有,作業者マスタ[作業者ID]と多対一,複数値フィールド

【作業者マスタ】

[フィールド名] [データ型]

作業者ID オートナンバー型※主キー,リレーション有,主担当、副担当と一対多

作業者名 テキスト型

◎テーブルデータ

【業務内容テーブル】

業務内容ID 業務内容名 主担当 副担当

1 業務A 1 2;3

2 業務B 2 1;3

3 業務C 3 1;2

5 業務D 3 1

【作業者マスタ】

作業者ID  作業者名

1  佐藤

2  田中

3  鈴木

◎クエリの構成(SQL):

SELECT 作業者マスタ.作業者名 AS 作業者名, 業務内容テーブル.業務内容名 AS 主担当, 業務内容テーブル_1.業務内容名 AS 副担当

FROM (作業者マスタ LEFT JOIN 業務内容テーブル ON 作業者マスタ.作業者ID = 業務内容テーブル.主担当) LEFT JOIN 業務内容テーブル AS 業務内容テーブル_1 ON 作業者マスタ.作業者ID = 業務内容テーブル_1.副担当.Value;

◎現状のクエリ(SQL)の出力結果:

作業者名|主担当|副担当

佐藤|業務A|業務B

佐藤|業務A|業務C

佐藤|業務A|業務D

田中|業務B|業務A

田中|業務B|業務C

鈴木|業務C|業務A

鈴木|業務C|業務B

鈴木|業務D|業務A

鈴木|業務D|業務B

◎本来出したかった出力結果:

作業者名|主担当|副担当

佐藤|業務A|業務B,業務C,業務D

田中|業務B|業務A,業務C

鈴木|業務C,業務D|業務A,業務B

・上記の「現状のクエリ(SQL)の出力結果」を、「本来出したかった出力結果」のようにするにはどうすればよろしかったでしょうか(SQL、その他Accessの標準機能で

対応可能でしょうか)?

SQL文の他、その場合のクエリの設定方法、またはそのほかのご提案等ございましたらご教示いただけますと幸いです。

◎目的概要(参考):

「業務内容にひもづく主担当者、副担当者」以外に、その逆(?)の「担当者各位にひもづく主担当、副担当の業務内容」の情報を取得し、

台帳を作成したいと考えています。

その際、一つのレコードで、一目で「どれが主担当で、どれが副担当の業務なのか」がわかるように表現したいのですが、上記の「現状のクエリ(SQL)の結果」のように

現状は業務内容が重複して表示されてしまっています。

以上につきまして、何卒よろしくお願い申し上げます。

Microsoft 365 と Office | アクセス | 家庭向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

9 件の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2015-12-01T04:38:04+00:00

    hatena19様

    申しわけありません、もう一点、追加でお教えいただければと存じます。

    ◎【主担当、副担当いずれも担当していない担当者】がいた場合のエラー回避方法

    【主担当、副担当いずれも担当していない担当者】がいた場合、以下のようなエラーが出力されてしまいます。

    "3021:BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。"

    ※以下出力の例です。作業者佐藤は副担当を一つも担当しておらず、また作業者田中は主担当を一つも担当していないというようにデータを作成した場合、以下のようなエラーが出力されいます。

    作業者名 主担当 副担当
    佐藤 業務A,業務B 3021:BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。
    田中 3021:BOF と EOF のいずれかが True になっているか、または現在のレコードが削除されています。要求された操作には、現在のレコードが必要です。 業務A,業務C,業務D
    鈴木 業務C,業務D 業務A,業務B

    DJOINの関数をIIFで空白としたりISEERORでくくってみたりエラー文を文字列で判定したり等して回避しようとしましたが、うまくいきませんでした。

    上記のようなケースの場合の回避方法(もしよろしければ先にお教えいただいたSQLに修正するような形で)を別途お教えいただけますと幸甚です。

    ※回避方法としては、"エラーになった場合空白を入力する"、"主担当(副担当)なしと入力する"などで十分です(それが難しいのかもしれませんが・・・)。

    以上何卒よろしくお願いいたします。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2015-11-29T06:32:59+00:00

    希望の結果が出力できました。大変助かりました、誠にありがとうございます!

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  3. Anonymous
    2015-11-28T20:30:47+00:00

    前回の投稿で「現状のクエリから」と回答しましたが、必要なかったですね。

    DJoin関数をリンク先からコピーしておいて、下記のクエリで希望の結果になります。

    SELECT

     作業者名,

     DJoin("業務内容名","業務内容テーブル","主担当=" & [作業者ID]) AS 主担当,

     DJoin("業務内容名","業務内容テーブル","副担当.Value=" & [作業者ID]) AS 副担当

    FROM 作業者マスタ;

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  4. Anonymous
    2015-11-28T14:39:52+00:00

    早々に誠にありがとうございます。

    早速DJoin2関数を以下のようにして試してみましたが、エラーが出力されてしまいました。

    もしよろしければ不足点を指摘いただけますと幸いです。

    =============================================

    ・Moduleにコードを挿入

    ・クエリを集計クエリにする

    ・フィールドに以下を挿入する

    主担当: DJoin2("業務内容名","業務内容テーブル","作業者名='" & [作業者名] & "'")

    副担当: DJoin2("業務内容名","業務内容テーブル_1","作業者名='" & [作業者名] & "'")

    以下のエラーが出力される

    -2147217904:パラメーターが少なすぎます。1 を指定してください。

    -2147217865:入力テーブルまたはクエリ '業務内容テーブル_1' が見つかりませんでした。そのテーブルやクエリが存在していること、または名前が正しいことを確認してください。

    ※http://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q12127599902

    こちらも参考にさせていただきました。

    =============================================

    実際の設定画面は以下の通りです。

    以上、なにとぞよろしくお願い申し上げます。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  5. Anonymous
    2015-11-28T03:12:40+00:00

    現状のクエリからDJoin関数で副担当を結合した結果を出力する。

    DJoin 関数 - リスト文字列を取得する方法 | YU-TANG's MS-Access Discovery

    結果をレポートに出力するのでよければ、下記の方法で。

    グループ内のデータを横連結する - hatena chips

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません