首页 > 解决方案 > 用 0 替换重复项,保留一个实例 - MS ACCESS

问题描述

我有一个数据集,其格式类似于:

Purchase_Order  PO_Spend    Receipt_Date
PO1           200,000.00    12/19/2017
PO1           200,000.00    11/20/2017
PO2           30,000.00       2/5/2018
PO2           30,000.00       1/2/2018
PO3           45,000.00       2/7/2018
PO3           45,000.00     11/20/2017
PO3           45,000.00     12/21/2017

该数据集将用于报告目的,我需要将重复的采购订单金额替换为 0,以避免最终用户旋转数据集并错误地汇总 PO_spends。

我希望我的数据集看起来像这样:

Purchase_Order  PO_Spend    Receipt_Date
PO1          200,000.00     12/19/2017
PO1                0.00     11/20/2017
PO2           30,000.00       2/5/2018
PO2                0.00       1/2/2018
PO3           45,000.00       2/7/2018
PO3                0.00     11/20/2017
PO3                0.00     12/21/2017

有关如何解决删除此重复项的任何想法?从简单的 Access 查询到 SQL for Access 或 VBA 都可以解决问题。

标签: sqlvbams-access

解决方案


IIF考虑一个包含在条件中的相关子查询

SELECT p.Purchase_Order,     
       IIF((SELECT Count(*) FROM PO_Table sub
            WHERE sub.Purchase_Order = p.Purchase_Order
              AND sub.Receipt_Date <= p.Receipt_Date) = 1, p.PO_Spend, 0) AS [PO_Spend_Final],
       p.Receipt_Date
FROM PO_Table p
ORDER BY p.Purchase_Order, p.Receipt_Date

或者,考虑一个DCount相关计算:

SELECT p.Purchase_Order,
       IIF(DCount("*", "PO_Table", "Purchase_Order='" & p.Purchase_Order 
                  & "' AND Receipt_Date <= #" & p.Receipt_Date & "#") = 1, PO_Spend, 0) As [PO_Spend_Final], 
       p.Receipt_Date
FROM PO_Table p
ORDER BY p.Purchase_Order, p.Receipt_Date

确保将PO_Table更新为所有引用中的实际表名。


推荐阅读