Как я могу выразить условие СУММЫ, используя SWITCH или вложенный IIF? - PullRequest
0 голосов
/ 26 июня 2019

У меня есть запрос с кодом SQL, который вычисляет рабочие дни для каждого из следующих действий: Interstaff, Mission, `` Congés` с использованием определенной функции VBA.

Когда в один день выполняются два действия, он считает 1 день для каждого действия, я хочу, чтобы функция Sum проигнорировала этот день, и перейду к следующему.

Я хотел бы изменить свой код SQL, чтобы добавить это условие:

«При расчете миссии, если в тот же период есть конгы, игнорируйте этот день (и отдайте приоритет подсчету только в конгезах)»

Я читал, что есть ПЕРЕКЛЮЧЕНИЕ или вложенные условия ИИФ,но я не смог перевести это в свой настоящий код ...

Пожалуйста, примите во внимание, что я все еще начинающий на пути к обучению!

SELECT 
Z.Planning_Consultants.ID_Consultant,
Sum(IIf([Activité]="(2) Interstaff",WorkingDaysInDateRange([maxBegin],[minEnd])*Planning_Consultants.Time_Allocated,0)) AS NonBillable,
Sum(IIf([Activité]="(1) Mission",WorkingDaysInDateRange([maxBegin],[minEnd])*Planning_Consultants.Time_Allocated,0)) AS Billable,
Sum(IIf([Activité]="(3) Congés/Arrêt",WorkingDaysInDateRange([maxBegin],[minEnd])*Planning_Consultants.Time_Allocated,0)) AS Absent, 

Например, мистер А получилмиссия с 06/06/2019 по 07/06/2019.С выходным (конге) 06.06.2009.Я ожидаю, что результатом будет Миссия 4 дня и 1 день конгрега, в моем случае у меня будет 5 дней миссии и 1 конг,

Вот пример набора данных:

Activity    BegDate     EndDate     Time_Allocated
(1)Mission  01/01/2019  31/12/2019  100%
(3)congé    02/04/2019  05/04/2019  100%

Например, в апреле я хотел бы иметь 18 рабочих дней и 4 конге вместо 22 рабочих дней и 4 конге

1 Ответ

0 голосов
/ 26 июня 2019

Это тот тип запроса, который должен работать для вас.Я построил это на сервере sql, а не на доступе, поэтому вам, возможно, придется сделать несколько модов, но это даст вам идею.Это даст вам фактические дни для мероприятия, а также общее количество дней отпуска, которые охватывают мероприятие.Остальное оставлю до вас.

select t1.Activity, t1.Time_Allocated,
    WorkingDaysInDateRange(t1.BegDate, t1.EndDate) as days,
    sum(WorkingDaysInDateRange(
        case when t2.BegDate<T1.BegDate then T1.BegDate else t2.BegDate end,
        case when t2.EndDate>T1.EndDate then T1.EndDate else t2.EndDate end))
    as LeaveDays
from times t1
left join times t2 on t2.BegDate<=t1.Enddate and t2.EndDate>=t1.BegDate 
    and t2.Activity='(3)congé'
    and t1.Activity!='(3)congé'
group by t1.Activity, t1.Time_Allocated, t1.BegDate, t1.EndDate
...