MS access sum(iif()) 求助

MS access sum(iif()) assistance

我正在 MS Access 中构建报告 - 我遇到了一些让我遇到困难的事情。报告基本上由一堆信息组成,但我只关心两项。我有 2 列 - 1stAppt 和 2ndAppt。用户为报告输入一个日期范围 - 例如 1/1/2016 - 4/1/2016。我想要做的是这个......如果 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 在日期范围内即可。

您可以为每个 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 语句需要包含测试表达式:

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