Ms access Access 2007:如何开始工作周和工作周并在结果上显示工作周日期
好的,我有一个查询,需要在输出上显示所有的周末日期,并在周日开始到周六结束的一周内对Ms access Access 2007:如何开始工作周和工作周并在结果上显示工作周日期,ms-access,ms-access-2007,Ms Access,Ms Access 2007,好的,我有一个查询,需要在输出上显示所有的周末日期,并在周日开始到周六结束的一周内对callIDs进行计数 目前我正在插入startdate和enddate,但这不会在输出中累积周末 这意味着我希望在输出中看到的是: 2015年7月2日工作周15人(每位主管) 2015年2月14日周末25人 2015年2月21日周末9人 选择不同的[Coach].[LastName]&“,”&[Coach].[FirstName]作为CoachName,Count(S.CallId)作为[Count],tbl
callID
s进行计数
目前我正在插入startdate和enddate,但这不会在输出中累积周末
这意味着我希望在输出中看到的是:
- 2015年7月2日工作周15人(每位主管)
- 2015年2月14日周末25人
- 2015年2月21日周末9人
选择不同的[Coach].[LastName]&“,”&[Coach].[FirstName]作为CoachName,Count(S.CallId)作为[Count],tblLocations.LocationName,S.DateScored
从tblLocations内部联接(tblScores作为S内部联接TBlemEmployees作为Coach在S.CoachId=Coach.ID上)到tblLocations.ID=S.LocationId
按[Coach].[LastName]&“,”和[Coach].[FirstName],tblLocations.LocationName,Coach.Source,S.Completed,S.DateScored分组
有(((tblLocations.LocationName)=“纳什维尔”或(tblLocations.LocationName)=“梭伦”或(tblLocations.LocationName)=“圣安东尼奥”或(tblLocations.LocationName)=“凤凰城”)和((Coach.Source)=“主管”)和((S.Completed)=是)和((S.DateScored>=[开始日期]和(S.DateScored)您必须使用一些Access SQL函数:
、IIF()
和Weekday()
。基本上,您必须找到日期(1-7,对应于太阳周六),然后添加相应的值,以获取所有日期以返回周六日期:DateAdd()
SELECT [Coach].[LastName] & ", " & [Coach].[FirstName] AS CoachName, Count(S.CallId) AS [CountOfSupervisors], tblLocations.LocationName, IIF(Weekday(S.DateScored) = 7, S.DateScored, IIF(Weekday(S.DateScored) = 6, DateAdd('d', 1, S.DateScored), IIF(Weekday(S.DateScored) = 5, DateAdd('d', 2, S.DateScored), IIF(Weekday(S.DateScored) = 4, DateAdd('d', 3, S.DateScored), IIF(Weekday(S.DateScored) = 3, DateAdd('d', 4, S.DateScored), IIF(Weekday(S.DateScored) = 2, DateAdd('d', 5, S.DateScored), IIF(Weekday(S.DateScored) = 1, DateAdd('d', 6, S.DateScored), Null))))))) As EndOfWeek FROM tblLocations INNER JOIN (tblScores AS S INNER JOIN tblEmployees AS Coach ON S.CoachId = Coach.ID) ON tblLocations.ID = S.LocationId WHERE (((tblLocations.LocationName IN ('Nashville','Solon','San Antonio','Phoenix') AND ((Coach.Source)='Supervisor') AND ((S.Completed)=Yes) AND ((S.DateScored)>=[Start Date] And (S.DateScored)<=[End Date])) GROUP BY [Coach].[LastName] & ", " & [Coach].[FirstName], tblLocations.LocationName, Coach.Source, S.Completed, IIF(Weekday(S.DateScored) = 7, S.DateScored, IIF(Weekday(S.DateScored) = 6, DateAdd('d', 1, S.DateScored), IIF(Weekday(S.DateScored) = 5, DateAdd('d', 2, S.DateScored), IIF(Weekday(S.DateScored) = 4, DateAdd('d', 3, S.DateScored), IIF(Weekday(S.DateScored) = 3, DateAdd('d', 4, S.DateScored), IIF(Weekday(S.DateScored) = 2, DateAdd('d', 5, S.DateScored), IIF(Weekday(S.DateScored) = 1, DateAdd('d', 6, S.DateScored), Null)))))));
您会注意到我调整了您的一些代码。您可以将所有
语句移动到HAVING
子句中(WHERE
在表示聚合时使用-Count、Sum、Avg、First、Last)。此外,您还可以将HAVING
子句用于多个OR条件。希望这能奏效!考虑IN()
而不是那些嵌套的DateAdd('d',IIf(S.DateScored为Null,0,7-工作日(S.DateScored)),S.DateScored)作为EndOfWeek
表达式。另外IIf
在SELECT DISTINCT
查询中没有用处。谢谢大家,我将在完成必须生成的报告后立即回复:Sgroupby
SELECT [Coach].[LastName] & ", " & [Coach].[FirstName] AS CoachName, Count(S.CallId) AS [CountOfSupervisors], tblLocations.LocationName, DateAdd('d', IIf(S.DateScored Is Null, 0, 7 - Weekday(S.DateScored)), S.DateScored) As EndOfWeek FROM tblLocations INNER JOIN (tblScores AS S INNER JOIN tblEmployees AS Coach ON S.CoachId = Coach.ID) ON tblLocations.ID = S.LocationId WHERE (((tblLocations.LocationName IN ('Nashville','Solon','San Antonio','Phoenix') AND ((Coach.Source)='Supervisor') AND ((S.Completed)=Yes) AND ((S.DateScored)>=[Start Date] And (S.DateScored)<=[End Date])) GROUP BY [Coach].[LastName] & ", " & [Coach].[FirstName], tblLocations.LocationName, Coach.Source, S.Completed, DateAdd('d', IIf(S.DateScored Is Null, 0, 7 - Weekday(S.DateScored)), S.DateScored);