質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

Q&A

解決済

1回答

1655閲覧

Access 時系列グラフ2

saksak_planner

総合スコア6

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

データベース設計

データベース設計はデータベースの論理的や物理的な部分を特定する工程です。

0グッド

0クリップ

投稿2021/04/25 15:20

編集2021/04/27 01:17

お世話になります。
先日、質問させていただいた際にうまく説明することができていないにも
関わらずご回答ありがとうございました。

その後、少し頭を整理する時間があり再度取り組んでみましたが
VBAを使用せずにうまい具合にクエリで解決する方法がどうしても浮かびません。
お知恵をお貸しいただけないでしょうか。

ある期間の累計申請数とその内訳(タスク)をグラフ化したいです。

★月度累計数⁼その月までの申請数となり、必ず右肩あがりになります
★受付後、TB_処理にレコードがなければ未処理でカウントします
★動きがない月は、前月と同じタスクでカウントします
★月度内にタスクが2以上ある場合は日付の最大でカウントします

未処理のレコードは、TB_申請とTB_処理を管理番号の不一致クエリで取得できるため
毎月のタスクの方がうまく取得できればUnionしようと思っています。

実際のレコードは約1200件あるので、6カ月分グラフ化するとなると
1200×6のデータソースが必要です。

表示までの時間もできるだけ早くしたいため、どうかご教示お願いします。

《テーブル構成》

【TB_申請】 管理番号(主キー)、受付日、案件名称
【TB_処理】 管理番号(複合キー)、処理日 (複合キー)、タスクID
【TB_タスク】ID(主キー)、名称

《レコード》

【TB_申請】

管理番号受付日案件名称
A0012021/1/1変更依頼1
A0022021/3/9変更依頼2
A0032021/4/6変更依頼3
A0042021/5/4変更依頼4

【TB_処理】

管理番号処理日タスク
A0012021/2/10タスク1
A0012021/2/25タスク2
A0012021/4/21受理
A0022021/4/3タスク1
A0022021/5/5不受理

【TB_グラフ期間】

年月
2021年1月
2021年2月
2021年3月
2021年4月
2021年5月
2021年6月

《出力したいクエリ》

イメージ説明

《作成したいグラフ》

イメージ説明


アドバイスいただいて、以下のデータソースまで作成できました。
Unionすることなく、意図するものに近いクエリが作成できました。

あとは、動きがない月の管理番号を前月タスクで出力できれば完成です。
どうかお知恵をお貸しください。よろしくお願いいたします。

![イメージ説明

SQL

1★判定ありの月度MAXタスク 2 3SELECT Format(A.処理日,'yyyy\年m\月') AS 月度, A.管理番号, A.[タスク], A.処理日 4 5FROM TB_処理 AS A INNER JOIN (SELECT 管理番号, MAX(処理日) AS 処理日最大 FROM TB_処理 6 7GROUP BY TB_処理.[管理番号], Format([処理日],'yyyy\年m\月')) AS B ON (A.処理日 = B.処理日最大) AND (A.管理番号 = B.管理番号) 8 9ORDER BY Format(A.処理日,'yyyy\年m\月'), A.管理番号; 10 11★時系列グラフ月度総数 12 13SELECT TB_申請.管理番号, TB_グラフ期間.年月, TB_申請.受付日 14 15FROM TB_グラフ期間, TB_申請 16 17WHERE (((Format([受付日],"yyyy\年m\月"))<=[年月])) 18 19ORDER BY TB_申請.管理番号, TB_グラフ期間.年月; 20 21★時系列グラフデータソース 22 23SELECT [★時系列グラフ月度総数].管理番号, [★時系列グラフ月度総数].年月, Nz([タスク],"未処理") AS 月度タスク 24 25FROM ★時系列グラフ月度総数 LEFT JOIN ★判定ありの月度MAXタスク 26 27ON ([★時系列グラフ月度総数].管理番号 = [★判定ありの月度MAXタスク].管理番号) AND ([★時系列グラフ月度総数].年月 = [★判定ありの月度MAXタスク].月度) 28 29ORDER BY [★時系列グラフ月度総数].管理番号, [★時系列グラフ月度総数].年月; 30

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

未処理のレコードは、TB_申請とTB_処理を管理番号の不一致クエリで取得できるため
毎月のタスクの方がうまく取得できればUnionしようと思っています。

月毎のクエリーは以下の様な感じですね。
TB_グラフ期間.年月は文字型より日付時刻型にしておいて、selectでFormatするようにした方が良いかと思います。

SQL

1select TB_グラフ期間.年月 as 月度, TB_処理.管理番号, TB_タスク.名称 as タスク名称 2from ( 3 TB_グラフ期間 4 inner join TB_処理 5 on TB_グラフ期間.年月 = Format(TB_処理.処理日, 'yyyy年m月') 6 ) inner join TB_タスク 7 on TB_処理.タスクID=TB_タスク.ID 8order by CDate(TB_グラフ期間.年月)

追記

前月タスクを引き継ぐレコードが作成できていません

TB_グラフ期間から見て直近のTB_処理を求めれば、引き継ぎ用のタスクが取得が出来ます。
以下の様なクエリーを作成し、「★時系列グラフデータソース」に結合してタスクを取得すれば良いと思います。

SQL

1select TB_処理.管理番号, TB_グラフ期間.年月 2 , Format(max(TB_処理.処理日), 'yyyy\年m\月') AS 直近月度 3from TB_グラフ期間, TB_処理 4where TB_グラフ期間.年月 >= Format(TB_処理.処理日, 'yyyy\年m\月') 5group by TB_処理.管理番号, TB_グラフ期間.年月

重ねて言っておきますが、日付は日付型で扱う方が良いですよ。
最低でも、書式を(yyyy\年mm\月)にしておかないと大小比較が意図しないものになってしまいますよ。
例えば('2012年2月' > '2012年12月')はTrueになります。
上記のSQLも同様です。

投稿2021/04/25 17:35

編集2021/04/27 02:18
sazi

総合スコア25138

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

saksak_planner

2021/04/26 13:09

sazi様 いつもありがとうございます。とても助かりました。 ご教示いただいたクエリから月度×総数のデータソースを作成できるまできました。 が、更に問題点がありました。 前月タスクを引き継ぐレコードが作成できていません…あと一息というところです。 コメント追加しましたので、ご確認いただけますと幸いです。
sazi

2021/04/26 13:44

SQLは画像ではなくテキストにして下さい。
saksak_planner

2021/04/27 01:18

コメントありがとうございます。 コード載せましたので、ご確認をお願いします。
saksak_planner

2021/04/28 01:10

無事に意図するグラフを作成でき、大変勉強になりました。 これから日付型に直し、完成形にいたします。 貴重なお時間をありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問