在尝试使用IIF语句时,我无法使Where语句生效。我尝试了一些sql的变种无济于事。我想要做的是计算假期获得直到特定日期。当我单独使用我的Between语句时它工作正常。当我尝试在系统时钟超过5-20-13之后重置计数器时,如果刚刚过去的阵亡将士纪念日假期应该显示1,则我没有返回结果。我无法弄清楚正确语法的代码段是
WHERE (((SchedulingLog.EventDate)=IIf(Date()>DateSerial(Year(Date()),5,20),((SchedulingLog.EventDate) Between DateSerial(Year(Date()),5,20) And DateSerial(Year(Date())+1,5,20)),((SchedulingLog.EventDate) Between DateSerial(Year(Date())-1,5,20) And DateSerial(Year(Date()),5,20)))))
以下是我的整个SQL。
SELECT Roster.UserID, SchedulingLog.Category,
Sum(IIf([CatDetail] Like '*Gain*',[Value],0)) AS Gain, DateSerial(Year(Date()),5,20) AS ResetDate, Date() AS [Date]
FROM SchedulingLog INNER JOIN Roster ON SchedulingLog.UserID = Roster.UserID
WHERE (((SchedulingLog.EventDate)=IIf(Date()>DateSerial(Year(Date()),5,20),((SchedulingLog.EventDate) Between DateSerial(Year(Date()),5,20) And DateSerial(Year(Date())+1,5,20)),((SchedulingLog.EventDate) Between DateSerial(Year(Date())-1,5,20) And DateSerial(Year(Date()),5,20)))))
GROUP BY Roster.UserID, SchedulingLog.Category, DateSerial(Year(Date()),5,20), Date()
HAVING (((SchedulingLog.Category) Like "DH*" Or (SchedulingLog.Category) Like "Comp*"));
非常感谢任何协助。
答案 0 :(得分:2)
我认为这个问题是双重的,首先你要找的是DATE = BETWEEN日期和日期。不确定这是否是Access中的问题,语法通常是WHERE Date BETWEEN Date and Date。 第二个问题是尝试在IIF语句中返回一个命令,而不是返回要由BETWEEN语句评估的值。
我相信这应该有效:
SELECT Roster.UserID, SchedulingLog.Category,
Sum(IIf([CatDetail] Like '*Gain*',[Value],0)) AS Gain, DateSerial(Year(Date()),5,20) AS ResetDate, Date() AS [Date]
FROM SchedulingLog INNER JOIN Roster ON SchedulingLog.UserID = Roster.UserID
WHERE SchedulingLog.EventDate BETWEEN IIf(Date()>DateSerial(Year(Date()),5,20)
,DateSerial(Year(Date()),5,20)
,DateSerial(Year(Date())-1,5,20))
AND IIf(Date()>DateSerial(Year(Date()),5,20)
,DateSerial(Year(Date())+1,5,20)
,DateSerial(Year(Date()),5,20))
GROUP BY Roster.UserID, SchedulingLog.Category, DateSerial(Year(Date()),5,20), Date()
HAVING (((SchedulingLog.Category) Like "DH*" Or (SchedulingLog.Category) Like "Comp*"));