2015-04-03 2 views
0

Хорошо, у меня есть запрос, которому необходимо ВСЕ ВРЕМЯ ВЫЯВЛЕНИЯ, чтобы показывать на выходе, а также делать подсчеты callID, рассмотренные в неделя, которая начинается в воскресенье и заканчивается в субботу?Доступ к 2007 году: как выполнить недельный и выходные дни и показать выходные результаты по результату

В настоящее время я подключаю начальную и конечную даты, но это не накапливает выходные на выходе.

Значение, что я хочу видеть в выходе:

  • Weekending 2/7/2015 кол-15 (для каждого руководителя)

  • Weekending 2/14/2015 кол-25

  • Weekending 2/21/2015 кол-9

    SELECT DISTINCT [Coach]. [ЬазШате] & "" & [Coach]. [FirstName] AS CoachName, Count (S.CallId) AS [Count], tblLocations.LocationName, S.DateScored FROM tblLocations INNER JOIN (tblScores AS S INNER JOIN tblEmployees AS Coach ON S.CoachId = Coach. ID) ON tblLocations.ID = S.LocationId GROUP BY [Coach]. [LastName] & "," & [Coach]. [FirstName], tblLocations.LocationName, Coach.Source, S.Completed, S.DateScored ИМЕЕТ (((tblLocations.LocationName) = "Nashville" Или (tblLocations.LocationName) = "Solon" Или (tblLocations.LocationName) = "Сан-Антонио" Или (tblLocations.LocationName) = "Phoenix") AND ((Coach.Source) = «Супервизор») AND ((S.Completed) = Yes) AND ((S.DateScored)> = [Дата начала] И (S.DateScored) < = [Дата окончания]));

ответ

2

Вы должны будете использовать несколько функций SQL Access: IIF(), Weekday() и DateAdd(). По существу, вы должны найти weekday number (1-7, что соответствует Sun-Sat), а затем добавить соответствующее значение, чтобы получить все даты, чтобы вернуть даты субботу Дейта:

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))))))); 

Кроме того, здесь менее многословным решение как это определено @HansUp без вложенных IIF() заявлений:

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); 

Вы заметите, я приспособил часть своего кода. Вы можете переместить все ваши операторы HAVING в предложение WHERE (HAVING используется, когда агрегаты выражены - количество, сумма, средняя, ​​первая, последняя). Кроме того, вы можете использовать предложение IN() для нескольких условий ИЛИ. Надеюсь, это сработает!

+1

Рассмотрим 'DateAdd ('d', IIf (S.DateScored Is Null, 0, 7 - Weekday (S.DateScored)), S.DateScored) AS EndOfWeek' вместо этих вложенных выражений' IIf'. Также 'SELECT DISTINCT' не полезен в запросе' GROUP BY'. – HansUp

+0

Спасибо всем, и я отвечу на эти ответы, как только закончим с отчетами, которые я должен представить: S –

Смежные вопросы