如何编写SQL找出不同发票号下重复的交易编号?
解决跨发票号重复交易编号的SQL方案
问题分析
你原有的SQL按sttran、strefno、STDATE分组,统计的是同一发票号、同一日期下的交易编号重复次数,这属于业务允许的情况,自然筛选不出你要的跨发票号重复的交易数据。正确的思路是统计每个交易编号对应的不同发票号数量,当数量大于1时,就是不符合业务逻辑的记录。
方案1:找出所有存在跨发票号重复的交易编号
SELECT sttran, COUNT(DISTINCT strefno) AS distinct_invoice_count FROM stocktransfer -- 若实际表名为postfrh,请替换此处 GROUP BY sttran HAVING COUNT(DISTINCT strefno) > 1
这个查询会列出所有在多个不同发票号下出现的交易编号,以及对应的不同发票号数量。
方案2:列出这些问题交易的全部明细记录
如果需要查看这些问题交易的完整数据,可以用子查询关联原表:
SELECT t.* FROM stocktransfer t -- 若实际表名为postfrh,请替换此处 INNER JOIN ( SELECT sttran FROM stocktransfer -- 若实际表名为postfrh,请替换此处 GROUP BY sttran HAVING COUNT(DISTINCT strefno) > 1 ) problematic ON t.sttran = problematic.sttran ORDER BY t.sttran, t.strefno
这个查询会返回所有跨发票号重复的交易的完整行数据,方便你进一步核查。
内容的提问来源于stack exchange,提问作者Dharmin
相关产品推荐
相关产品推荐

