用于在Agresso

时间:2016-10-03 20:57:34

标签: sql group-by duplicates having

我正在尝试编写一些SQL,以便我可以选择具有相同货币价值和交易日期的可能重复的条目,但这些条目可能会以稍微不同的方式输入发票参考。

我查看了使用“GROUP”和“HAVING”的SQL示例,但我在某处出错了,我的SQL已经处于休眠状态几年了。

这就是我写的。

SELECT amount, apar_id, trans_date
FROM agltransact
WHERE client='AA' AND period=201704 AND apar_id<>0
GROUP BY amount, apar_id, trans_date
HAVING COUNT(*) >1
ORDER BY apar_id,amount

我希望这会返回任何具有相同交易日期(trans_date)和相同供应商ID(apar_id)的重复金额(金额),但实际上它会返回我不理解的数据。这是包含各种供应商,交易日期和金额的更长列表中第一个列出的供应商ID的输出;

Amount  Supp ID Tr Date
-4149   10303   30/06/2016
-3459   10303   30/06/2016
115.3   10303   30/06/2016
138.3   10303   30/06/2016
3343.7  10303   30/06/2016
4010.7  10303   30/06/2016

为了在相同的交易日期和供应商ID下检索重复的金额,是否有人能够指出我正确的方向?

2 个答案:

答案 0 :(得分:0)

您正在查看包含所有交易信息的表格,您应该只查看存储在asutrans表格中的AP控制线。这是未经测试的,但应该为您提供所需的所有信息,以便在是否出现错误时做出明智的选择。

SELECT voucher_no, ext_inv_ref, description, apar_id, amount, trans_date 
FROM asutrans
WHERE (amount, apar_id, trans_date) in
    (
     SELECT amount, apar_id, trans_date
     FROM asutrans
     WHERE client='AA' and period=201704
     GROUP BY amount, apar_id, trans_date
     HAVING count(*) > 1
)
ORDER BY apar_id, amount, trans_date, voucher_no;

答案 1 :(得分:0)

如果你正在寻找asutrans,你还应该包括asuhistr。