【问题标题】:MS Access: Calculate difference when two criteria meetMS Access:当两个条件满足时计算差异
【发布时间】:2018-04-18 19:44:17
【问题描述】:

我有一个与 MS Access 相关的问题。我有一个看起来像这样的表:

Table1

我需要做的是:
1. 找到截止日期 29.01.2017(一年的第一个月),
2.查看对应的AccountNumber和SubAccountNumber,
3.找到与上个月的AccountNumber和SubAccountNumber匹配的截止日期28.02.2017(下个月),
4. 减去金额,
5. 并显示结果。

在此示例中(表1):第一个截止日期为 29.01.2017,AccountNumber 为 1,SubAccountNumber 为 23,金额为 400 欧元。寻找与 AccountNumber 和 SubAccountNumber 匹配的下个月,我们找到值 300€。我现在必须从 400 欧元中减去 300 欧元,并将其放在我添加的字段中(另见表 2)。

到目前为止,我所做的是连接两个属性 AccountNumber 和 SubAccountNumber,所以我的表格现在看起来像这样:

Table2

我认为这样会更容易,因为现在我可以查找第一个月/截止日期(29.01.2017),获取相应的 CONCAT,查找具有相同 CONCAT 的下个月/截止日期,然后减去金额。

虽然我是 Access 新手,但我不知道如何去做。任何提示将不胜感激。如果您认为我使用串联的方法不是针对目标的,或者如果我没有将问题说得足够清楚,请告诉我。

PS 我在网上看到 Access 提供了一个 if-else 语句 - 这是一个想法吗?

【问题讨论】:

    标签: ms-access criteria


    【解决方案1】:

    那应该能让你到达那里或非常接近:

    SELECT T1.ACCOUNTNUMBER, T1.SUBACCOUNTNUMBER, T1.AMOUNT-T2.AMOUNT AS AMOUNTDIFF
    FROM Table1 T1
        INNER JOIN Table1 T2
            ON T1.ACCOUNTNUMBER=T2.ACCOUNTNUMBER
            AND T1.SUBACCOUNTNUMBER=T2.SUBACCOUNTNUMBER
            AND DateDiff('m',DateAdd('d',1,T1.DEADLINE), DateAdd('d',1,T2.DEADLINE))=1
    WHERE T1.DEADLINE=#29.01.2017#
    

    确保您对WHERE 使用的任何日期格式都是您所在地区的有效日期格式。显然用你的表的实际名称替换Table1

    我没有一个简单的测试方法,所以可能会有错别字。

    【讨论】:

    • 永远不要在语言环境之后格式化 SQL 中的日期表达式。始终使用 ISO 序列 yyyy/mm/dd 或“反向”美国格式 mm/dd/yyyy
    • 我只从事面向美国市场的项目,所以我不知道其他地区会发生什么。 Access 如何知道 2/3/2018 是 3 月 2 日还是 2 月 3 日?这是否意味着即使是标准格式也可能因语言环境而无效?或者即使这不是默认格式,它是否假定它是美国?
    • SQL、VBA 和 DAO 需要 US 格式并接受 ISO 序列。 ADO 只接受 ISO 序列。因此,简单的规则是始终使用 ISO 序列——它永远不会失败。然而,在 GUI 中,格式是本地化的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    • 2017-10-06
    • 2023-02-03
    • 2021-02-05
    • 1970-01-01
    • 2021-11-30
    • 1970-01-01
    相关资源
    最近更新 更多