我遇到问题,需要SQL语句才能使用。说实话,当我谈到SQL时,我很绿,所以我试图尝试的尝试都来自我试图编辑的复制/粘贴代码,使其无法运行。所以我需要的是一个用于ACCESS报表的查询。
这里是什么样的数据是这样的:
使用IF THEN SQL查询生成报告
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个月内的金额加上任何其他事件中的“OccurrenceName”前6个月应该是他们的Tech Total。如果在过去6个月内没有“辅导”或“其他”事件发生,那么我需要对OccurrenceAmount进行总结,只是前6个月的滚动。
希望我解释得很好的场景很有意义。
编辑#1: 好了,我该数据预期输出应该是:
TechID Total
9991 4.5
9999 9.0
9998 2.0
因此,大家可以看到,对于TechID 9991计算4.5,因为有一个 “教练”并且在过去6个月内没有任何事情发生。 9999会有9个,因为在过去的6个月里有7次教练,并且在之后的6个月内有2次教练,总数为9 9998有2次,因为该技术在过去6个月内没有任何教练或任何东西,因此总数为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。所以我试着把这个查询连接到你的第二个查询来获得总计到一个查询,并不能得到它的工作。
查询: 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
所以这些结果得到了最新的教练日期(如果有的话)和最近事件的日期,所以我需要基于两个条件,总结纪录:
- 如果有是在过去6个月内的教练/其他日期,需要从该线发生的总数加上在他们的教练/其他日期之后发生的任何其他日期
- 如果在过去6个月内没有发生过教练/其他日期,那么我需要发生的事情总数在过去6个月内。
靠近得到一个工作查询!感谢您的帮助
“滚动前6个月”与“前6个月”和/或“前6个月”有什么不同?我想我不明白为什么无论“OccurenceName”是什么,你都无法用Tech对所有内容进行总和。 – 2013-04-22 14:26:11
您可以发布您的预期输出以及您的样本数据吗?谢谢。 – GarethD 2013-04-22 14:32:43
为了更加清晰,编辑。希望这有助于 – Zamael 2013-04-22 14:54:56