如何使用开关或嵌套IIF表示总和条件



我有一个带有SQL代码的请求,该请求计算每个活动的工作日:Interstaff,Mission,``congés'scongés`使用定义的VBA功能。

当同一天有两项活动时,每个活动都会计算1天,我希望总和函数忽略这一天,然后转到下一个。

我想修改我的SQL代码以添加此条件:

"在计算任务时,如果在同一时期内有一个congé,请忽略这一天(并优先考虑在congés中进行计数("

我读到有一个开关或嵌套的IIF条件,但是我无法在实际的代码中翻译出来...

请考虑我仍然是初学者,在学习的途中!

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, 

例如,A先生从2019年3月6日到2019年7月6日进行了任务。2019年6月6日休假(congé(。我预计输出将是任务为4天,而康登(Congé

这是数据集的示例:

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

4月份,我想拥有18个工作日和4个辅音,而不是22个工作日和4个康

这是应该对您有用的查询。我已经在SQL Server中构建了此功能,而不是访问,因此您可能必须制作一些mod,但它会给您这个想法。它将为您提供活动的实际日子,再加上涵盖活动的总休假日。其余的我将留给你。

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

最新更新