用0替换重复项,保留一个实例-MS ACCESS

时间:2018-06-25 16:56:42

标签: sql vba 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都可以解决问题。

1 个答案:

答案 0 :(得分:1)

考虑以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 更新为实际的表名。