この質問が少し長い場合は申し訳ありませんが、私がやろうとしていることを詳しく説明したかったのです。
私は、MS Access 2010/Windows 7 で、組織内のインシデント (障害など) を分析して報告するデータベースを開発しています。インシデントは、特定の期間、特定の場所で特定の日時に開始されたものとして報告されます。インシデントによって、1 つまたは複数の "ライブ レジリエンス停止" (LRO) が発生する場合があります。開始時刻は同じですが、場所と期間が異なる場合があります。たとえば、中央のテクニカル エリアでルーターが 600 秒間サービスを停止すると、スタジオ 5 と 6 でそれぞれ 60 秒と 30 秒のライブ停止が発生する可能性があります。
3 つの日付範囲についてレポートする必要があります: 問題の月、前の月、および (財務、4 月から始まる) 年初来です。たとえば、2012 年 3 月のレポートでは、2012 年 3 月 1 日から 2012 年 3 月 31 日 (月)、2012 年 2 月 1 日から 2012 年 2 月 29 日 (前)、2011 年 4 月 1 日から 2012 年 3 月 31 日 (YTD) の期間が考慮されます。
これらの日付は、ReportCentre というフォームで正しく計算されます。異なる日付範囲の LRO を返す 3 つのクエリがQueryLROMonth
ありQueryLROPrevious
ますQueryLROYTD
: したがって、たとえば次のQueryLROMonth
ように定義されます
SELECT lro.*
FROM lro INNER JOIN incidents ON lro.pid = incidents.id
WHERE (((incidents.begin) Between [Forms]![ReportCentre].[StartMonth] And
[Forms]![ReportCentre].[EndMonth]));
期待値を返します:
id pid duration facility
6 681 30 23
7 686 857 23
8 735 600 25
9 738 600 25
YTD クエリと同様に
id pid duration facility
1 100 120 25
2 366 5 25
3 380 460 1
4 505 341 23
5 622 0 29
6 681 30 23
7 686 857 23
8 735 600 25
9 738 600 25
20 1297 50 1
これまでのところは順調ですが、今は少し戸惑っています。3 つの LRO クエリ (およびその他のデータ) の出力を取得し、すべてを施設別にグループ化し、可用性などを計算する別のクエリを設計しようとしています。合計クエリを設計し、Facilities
(施設名の) テーブルとクエリを含めるとしQueryLROMonth
ます。
SELECT facilities.facility, Count(QueryLROMonth.id) AS lrocountmonth, Sum(QueryLROMonth.duration) AS lrosecondsmonth
FROM QueryLROMonth INNER JOIN facilities ON QueryLROMonth.facility = facilities.ID
GROUP BY facilities.facility;
これは正常に機能し、私が期待するものを生成します。
facility lrocountmonth lrosecondsmonth
HQ3 2 887
HQ5 2 1200
しかし、YTD クエリを導入するとすぐに:
SELECT facilities.facility, Count(QueryLROMonth.id) AS lrocountmonth, Sum(QueryLROMonth.duration) AS lrosecondsmonth, Count(QueryLROYTD.id) AS lrocountytd, Sum(QueryLROYTD.duration) AS lrosecondsytd
FROM QueryLROYTD INNER JOIN (QueryLROMonth INNER JOIN facilities ON QueryLROMonth.facility = facilities.ID) ON QueryLROYTD.facility = facilities.ID
GROUP BY facilities.facility;
何らかの理由で、誤って報告されたものがカウントされ始めます。具体的には、2 つのCount
列が一緒に掛けられてlrocountmonth
、lrosecondsmonth
両方とも で掛けられlrocountytd
ます。同様にlrocountytd
とlrosecondsytd
は両方とも で乗算されlrocountmonth
ます。
facility lrocountmonth lrosecondsmonth lrocountytd lrosecondsytd
HQ3 6 2661 6 2456
HQ5 8 4800 8 2650
私は何を間違っていますか?このもつれを防ぐにはどうすればよいですか?