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()
    DateAdd()
    。基本上,您必须找到日期(1-7,对应于太阳周六),然后添加相应的值,以获取所有日期以返回周六日期:

    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
    子句中(
    HAVING
    在表示聚合时使用-Count、Sum、Avg、First、Last)。此外,您还可以将
    IN()
    子句用于多个OR条件。希望这能奏效!

    考虑
    DateAdd('d',IIf(S.DateScored为Null,0,7-工作日(S.DateScored)),S.DateScored)作为EndOfWeek
    而不是那些嵌套的
    IIf
    表达式。另外
    SELECT DISTINCT
    groupby
    查询中没有用处。谢谢大家,我将在完成必须生成的报告后立即回复:S
    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);