必要な方法で SQL ステートメントを機能させるのに問題があります。正直なところ、私は SQL に関してはかなりグリーンなので、私が試みた試みは、機能するように編集しようとしたコピー/貼り付けコードから来ており、実行されていません。したがって、ACCESS でレポートに使用するクエリが必要です。
データは次のようになります。
ID TechID OccurrenceDate OccurrenceName OccurrenceAmt
247 9991 Friday, February 15, 2013 Coaching 4.50
242 9991 Friday, February 08, 2013 Con't Occurrence 0.00
241 9991 Thursday, February 07, 2013 Unscheduled Absense 1.00
240 9991 Wednesday, February 06, 2013 Shift Int less 2 hrs 0.50
243 9991 Monday, February 04, 2013 Unscheduled Absense 1.00
246 9991 Monday, January 21, 2013 Unscheduled Absense 1.00
245 9991 Wednesday, January 16, 2013 Con't Occurrence 0.00
244 9991 Tuesday, January 15, 2013 Unscheduled Absense 1.00
239 9999 Friday, February 08, 2013 Unscheduled Absense 1.00
237 9999 Wednesday, February 06, 2013 Unscheduled Absense 1.00
238 9999 Saturday, February 02, 2013 Coaching 7.00
236 9999 Tuesday, September 11, 2012 Other 6.00
235 9999 Tuesday, September 11, 2012 Other 0.00
228 9999 Thursday, August 23, 2012 Unscheduled Absense 1.00
227 9999 Friday, August 10, 2012 Unscheduled Absense 1.00
226 9999 Wednesday, August 08, 2012 Con't Occurrence 0.00
223 9999 Wednesday, February 29, 2012 Unscheduled Absense 1.00
249 9998 Saturday, February 02, 2013 Unscheduled Absense 1.00
251 9998 Monday, January 21, 2013 Unscheduled Absense 1.00
したがって、基本的に、過去 6 か月間に「Coaching」または「Other」の「OccurrenceName」がある場合、その金額に過去 6 か月間のその他の発生を加えたものが Tech Total になります。過去 6 か月間に「コーチング」または「その他」の発生がない場合は、過去 6 か月のローリングのみの OccurrenceAmount を合計する必要があります。
うまくいけば、私の非常によく説明されたシナリオが理にかなっています。
編集 #1: わかりました、このデータの期待される出力は次のようになります。
TechID Total
9991 4.5
9999 9.0
9998 2.0
ご覧のとおり、TechID 9991 は 4.5 と計算されます。これは、過去 6 か月間に「コーチング」が発生し、それ以降何も発生していないためです。9999 は、過去 6 か月間に 7 回のコーチングがあり、それ以降 2 回のコーチングがあったため、9 になります。9998 は、過去 6 か月間にコーチングなどがないため、合計が 2 になるため、2 になります。
編集 #2: したがって、カウントする必要がある行は、インデントされた行だけです。9999 については、7 回のコーチングと、さらに 2 回の定期的なオカレンスがあり、彼の合計は 9 回になりました。それはより明確ですか?
編集#3:
さて、もう少し道を進んだ。
@lance - 試行錯誤を通じて、私は近づいています...今のところこれを持っていますが、動作させることはできません:
SELECT tblEmployeeData.TechID, tblEmployeeData.LName, tblEmployeeData.FName, Sum(tblOccurrence.OccurrenceAmt), Last(tblOccurrence.CoachingDate) AS LastOfCoachingDate, tblEmployeeData.SupLName
FROM tblEmployeeData RIGHT JOIN tblOccurrence ON tblEmployeeData.TechID = tblOccurrence.TechID
GROUP BY tblEmployeeData.TechID, tblEmployeeData.LName, tblEmployeeData.FName, tblEmployeeData.SupLName
HAVING (((tblOccurrence.OccurrenceAmt))=IIf([tblOccurrence].[CoachingDate]="",[tblOccurrence].[OccurrenceDate] Between Date() And DateAdd('m',-6,Date()),IIf([tblOccurrence].[CoachingDate]<=DateAdd('m',-6,Date()),[tblOccurrence].[OccurrenceDate] Between Date() And DateAdd('d',[tblOccurrence].[CoachingDate],Date()))));
編集 #4: このクエリは、私が作業を開始した「最良の」最初のクエリです。すべての従業員データを取得してから、MaxCoaching と MaxDate に入力します。そのため、このクエリを 2 番目のクエリに接続して合計をクエリに追加しようとしましたが、機能しません。
クエリ:
SELECT tblEmployeeData.TechID, tblEmployeeData.LName, tblEmployeeData.FName, Max(tblOccurrence.CoachingDate) AS LastCoachingDate, Max([OccurrenceDate]) AS MaxDate, tblEmployeeData.SupLName
FROM tblEmployeeData LEFT JOIN tblOccurrence ON tblEmployeeData.TechID = tblOccurrence.TechID
GROUP BY tblEmployeeData.SupLName, tblEmployeeData.TechID, tblEmployeeData.LName, tblEmployeeData.FName
したがって、これらの結果は最新のコーチング日 (ある場合) と最新のイベント日を取得するため、2 つの条件に基づいてオカレンスを合計する必要があります。
- 過去 6 か月以内にコーチング/その他の日付がある場合は、その行の合計回数に加えて、コーチング/その他の日付の後に発生したその他の日付が必要です。
- 過去 6 か月以内にコーチングやその他の日付が発生していない場合は、過去 6 か月以内の合計回数が必要です。
機能するクエリの取得に近づきます! ご協力いただきありがとうございます