回答受付が終了しました

MicrosoftのAccessでデータベースを作成しているのですが、うまく作成できず困っています。 作成しようとしているのは人員テーブルです。 人員テーブルをこのような形で表現したいです。

MicrosoftのAccessでデータベースを作成しているのですが、うまく作成できず困っています。 作成しようとしているのは人員テーブルです。 人員テーブルをこのような形で表現したいです。 【人員テーブル】 部署名 | 日程 | 4~6月 | 7~9月 | 10~12月 部署1 | 社員 | 25 | 38 | 42 空欄 | 外注 | 35 | 27 | 21 空欄 | 合計 | 60 | 65 | 63 部署2 | 社員 | 27 | 42 | 34 空欄 | 外注 | 32 | 21 | 22 空欄 | 合計 | 59 | 63 | 66 【案件テーブル】 名前 | 4~6月 | 7~9月 | 10~12月 a | ○ | 空欄 | ○ b | ○ | ○ | ○ c | ○ | ○ | 空欄 ・ ・ ・ 【メンバテーブル】 名前 | 外注・社員 | 部署名 a | 社員 | 部署1 b | 外注 | 部署2 ・ ・ ・ 案件テーブルとメンバテーブルは多対1で結合しています。 案件テーブルとメンバテーブルはレコードがたくさんあります。 案件テーブルの中の人を外注と社員に分け、○がついているところの 人数を人員テーブルで表示したいと思っています。 部署1と部署2をユニオンクエリで上下に結合するというやり方が良いのでしょうか? 結合する場合ならそれぞれの集計テーブルの表現方法も教えていただけるとありがたいです。 Accessは初心者なのであまりわからないところもあります。

Microsoft Access | Office系ソフトウェア15閲覧xmlns="http://www.w3.org/2000/svg">100

回答(1件)

0

ご質問の内容から、人員テーブルはクエリでしか作成できません。 また、「空欄・外注」のレコードが2つありますが、これらを識別することができないため、例えば「部署1・外注」と「部署2・外注」のようにすみわけが必要でしょうね。さらに、最終的な行の並びを考慮して、社員と外注の値は「0_社員」と「1_外注」にします。 最初に、社員と外注の案件数を集計するSQL文を考えます。案件テーブルとメンバテーブルは内部結合をします。内部結合は以下記事を参考にしてください。 https://www.latest-info-system.com/access%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e3%81%ae%e7%b5%90%e5%90%88%e6%93%8d%e4%bd%9c%e3%80%80%e5%86%85%e9%83%a8%e7%b5%90%e5%90%88%e3%81%a8%e5%a4%96%e9%83%a8%e7%b5%90%e5%90%88/ フィールドは、部署名、外注・社員、4~6月、7~9月、10~12月とし、部署名と外注・社員フィールドはグループ化、それ以外はカウントとします。集計については以下の記事を参考にしてください。 https://www.latest-info-system.com/access%e3%82%af%e3%82%a8%e3%83%aa%e3%81%ab%e3%82%88%e3%82%8b%e3%83%87%e3%83%bc%e3%82%bf%e9%9b%86%e8%a8%88/ 以上からSQL文は次のとおり。 SELECT [メンバテーブル].部署名, [メンバテーブル].外注・社員, Count(案件テーブル.[4-6月]) AS [4-6月のカウント], Count(案件テーブル.[7-9月]) AS [7-9月のカウント], Count(案件テーブル.[10-12月]) AS [10-12月のカウント] FROM メンバテーブル INNER JOIN 案件テーブル ON [メンバテーブル].名前 = 案件テーブル.名前 GROUP BY [メンバテーブル].部署名, [メンバテーブル].外注・社員; これにより、次のような結果が得られます。 部署名|外注・社員|4~6月|7~9月|10~12月 __________________________ 部署1|0_社員 | ○ | ○ | ○ 部署1|1_外注 | ○ | ○ | ○ 部署2|0_社員 | ○ | ○ | ○ 部署2|1_外注 | ○ | ○ | ○ __________________________ ※○は案件数 続いて、部署1と部署2の合計は以下のSQL文になります。 SELECT [メンバテーブル].部署名, "合計" AS 合計, Count(案件テーブル.[4-6月]) AS [4-6月のカウント], Count(案件テーブル.[7-9月]) AS [7-9月のカウント], Count(案件テーブル.[10-12月]) AS [10-12月のカウント] FROM メンバテーブル INNER JOIN 案件テーブル ON [メンバテーブル].名前 = 案件テーブル.名前 GROUP BY [メンバテーブル].部署名, "合計"; 部署名|合計|4~6月|7~9月|10~12月 __________________________ 部署1|合計 | ○ | ○ | ○ 部署2|合計 | ○ | ○ | ○ __________________________ 最後に、これら2つの、SQL文をユニオンクエリでくっつけます。この際に、2つ目のフィールドのASを「日程」に修正します。ユニオンクエリは以下記事を参照ください。 https://www.latest-info-system.com/access%e3%83%a6%e3%83%8b%e3%82%aa%e3%83%b3%e3%82%af%e3%82%a8%e3%83%aa%e3%81%ae%e4%bd%9c%e6%88%90%e3%80%80%e3%83%86%e3%83%bc%e3%83%96%e3%83%ab%e9%96%93%e3%81%ae%e7%b5%90%e5%90%88/ SELECT [メンバテーブル].部署名, "合計" AS 日程, Count(案件テーブル.[4-6月]) AS [4-6月のカウント], Count(案件テーブル.[7-9月]) AS [7-9月のカウント], Count(案件テーブル.[10-12月]) AS [10-12月のカウント] FROM メンバテーブル INNER JOIN 案件テーブル ON [メンバテーブル].名前 = 案件テーブル.名前 GROUP BY [メンバテーブル].部署名, "合計" UNION SELECT [メンバテーブル].部署名, [メンバテーブル].外注・社員, Count(案件テーブル.[4-6月]) AS [4-6月のカウント], Count(案件テーブル.[7-9月]) AS [7-9月のカウント], Count(案件テーブル.[10-12月]) AS [10-12月のカウント] FROM メンバテーブル INNER JOIN 案件テーブル ON [メンバテーブル].名前 = 案件テーブル.名前 GROUP BY [メンバテーブル].部署名, [メンバテーブル].外注・社員; ※クエリウィザードでテーブルを追加せず、SQLビューに切り替えて、上記ユニオンクエリのSQLを記載すればOK。 以上で 部署名|日程 |4~6月|7~9月|10~12月 __________________________ 部署1|0_社員 | ○ | ○ | ○ 部署1|1_外注 | ○ | ○ | ○ 部署1|合計 | ○ | ○ | ○ 部署2|0_社員 | ○ | ○ | ○ 部署2|1_外注 | ○ | ○ | ○ 部署2|合計 | ○ | ○ | ○ __________________________ が完成します。 当方、サンプルデータを作って試してみましたら、上手く動きましたので、参考にしてみてください。