sql - 用 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 都可以解决问题。
解决方案
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更新为所有引用中的实际表名。
推荐阅读
- c++ - 为什么我的函数最后返回 0 或 1?
- javascript - couchbase 按部分键查看查询组
- powershell - 带有 Get-Mailbox 和 Get-MailboxStatistics 的 Powershell 脚本缺少输出
- excel - 输入日期后,宏将运行
- java - Apache Timer 运行两次
- android - ScrollView 内的 ConstraintLayout
- python - Python / Pandas / Pulp 优化重复
- django - 显示通过管理员上传的图像
- matrix - Octave:将矩阵导出到文件
- linux - 是否有一种规范的编程方式来查询属于 NUMA 节点的核心集?