在SQL查询中查找重复值:如何识别同供应商重复录入的发票
重复发票筛查解决方案
你之前用COUNT函数仅统计相同供应商ID、相同金额的记录总数,无法区分「同一供应商同金额的正常多笔发票」和「同一张发票重复录入生成不同发票号」的两类场景,核心判定逻辑需要补充同组内存在2个及以上不同发票号的条件。
SQL查询方案
假设发票表名为invoices,核心字段包括vendor_id(供应商ID)、invoice_no(发票号)、amount(发票金额)、vendor_name(供应商名称)
统计所有存在重复录入的供应商+金额分组
SELECT vendor_id, vendor_name, amount, COUNT(DISTINCT invoice_no) AS distinct_invoice_count FROM invoices GROUP BY vendor_id, vendor_name, amount HAVING COUNT(DISTINCT invoice_no) > 1
执行后会直接返回你示例中的Johns Bakery这类存在重复录入的分组记录。
导出所有重复录入的明细发票
如果需要拉出所有对应的发票明细,使用关联子查询实现:
SELECT t1.* FROM invoices t1 INNER JOIN ( SELECT vendor_id, amount FROM invoices GROUP BY vendor_id, amount HAVING COUNT(DISTINCT invoice_no) > 1 ) t2 ON t1.vendor_id = t2.vendor_id AND t1.amount = t2.amount ORDER BY t1.vendor_id, t1.amount
Excel处理方案
如果数据存储在Excel表格中,按以下步骤操作:
- 新增辅助列(假设为C列),合并供应商ID和金额字段,公式为
=A2&B2(A列为供应商ID、B列为金额,可根据实际列号调整) - 新增第二列辅助列(假设为D列),统计同分组下不同发票号的数量,公式为
=SUMPRODUCT(($C$2:$C$[你的数据最大行号]=C2)/COUNTIFS($E$2:$E$[你的数据最大行号],$E$2:$E$[你的数据最大行号],$C$2:$C$[你的数据最大行号],C2))(E列为发票号列) - 筛选D列数值大于1的所有行,即为需要排查的重复录入发票

内容的提问来源于stack exchange,提问作者noootnaaa
相关产品推荐
相关产品推荐

