我正在MS Access中构建一个报告 - 我遇到了一些我很困难的事情。基本上报告由一堆信息组成,但我只关心两个项目。我有2列 - 1stAppt和2ndAppt。用户输入日期范围 - 例如2016年1月1日至2016年4月1日。我正在尝试做的是....如果1stAppt属于日期范围,那么它是'1',与2ndAppt相同 - 我在查询中这样做。在某些情况下,1stAppt可能不在日期范围内,但是2ndAppt是 - 在这里我想确保我在1stAppt列中有一个'1',其中2ndAppt = 1.而且我在哪里遇到我的问题 - 因为我可以找出能做到的声明。这是我尝试过的......
=sum(iif((2ndappt=1) and (1stAppt=0), sum(1stAppt=1), sum(1stAppt))
所以在2ndAppt = 1且1stAppt = 0的情况下,我试图在1stAppt = 1中创建该行 - 然后我试图获取所有1stAppt的总数(这包括1stAppt之前为0的行)和2ndAppt是1)。我不知道我在这里是否有意义。
摘要:如果2ndAppt = 1且1stAppt = 0,则使1stAppt = 1并取所有1stAppt的总和(之前为1的那些,以及我刚刚更改为1的新1)。如果1stAppt = 1且2ndAppt = 0,那么我不关心它。我需要确保1stAppt在超出日期范围时被考虑在内,只要2ndAppt属于日期范围。
答案 0 :(得分:3)
您可以为每个Appt字段编写单独的IIF()语句。 Appt1可以通过嵌套来解决:
Appt1Test: IIF(Appt1 Between [Forms]![frmMyForm]![DateStart] And [Forms]![frmMyForm]![DateEnd], 1,
IIF(IIF(Appt2 Between [Forms]![frmMyForm]![DateStart] And [Forms]![frmMyForm]![DateEnd], 1, 0)=1,1,0))
Appt2Test: IIF(Appt2 Between [Forms]![frmMyForm]![DateStart]
And [Forms]![frmMyForm]![DateEnd], 1, 0)
然后在用作报表控件源的查询的WHERE子句中:
WHERE Appt1Test = 1 AND Appt2Test = 1
如果将IIF语句放在与控件源相同的查询中,则WHERE语句需要包含Test表达式:
WHERE IIF(Appt1 Between [Forms]![frmMyForm]![DateStart] And [Forms]![frmMyForm]![DateEnd], 1,
IIF(IIF(Appt2 Between [Forms]![frmMyForm]![DateStart] And [Forms]![frmMyForm]![DateEnd], 1, 0)=1,1,0))=1
AND IIF(Appt2 Between [Forms]![frmMyForm]![DateStart]
And [Forms]![frmMyForm]![DateEnd],1,0)=1