2016-10-03 7 views
1

私は、同じ通貨価値と取引日を持ちますが、若干異なる方法で請求書照会の入力があった可能性のある重複したエントリを取り出せるようにSQLを書こうとしています。Agressoで重複した請求書を検索する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)との重複量(額)を返すだろうと期待していたが、それは実際に私は理解していないデータを返します。これは、さまざまな供給元、取引日および金額を含むはるかに長いリストの最初にリストされたSupplier 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の下で重複量をしてください取得するために、正しい方向に私を指すようになりますか?

+0

期待した結果の種類を説明できますか? –

+0

申し訳ありません。私は、同じ取引日とサプライヤ番号の下で同じ価値を持つ金額を表示したいと考えていました。たとえば、経費が複数回入力されているため、取引日とサプライヤは常に同じです。ただし、「請求書番号」は「Fred Exps July 16」または「Fred Expenses 07-16」であり、したがって一意の請求書参照番号を持つことができます。同じサプライヤーと取引日の下で重複した値を見つけることによって、重複する転記があるかどうかを調べるためにこれらを調べることができました。返信いただきありがとうございます。 –

+0

どのDBMSを使用していますか? –

答えて

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; 
0

asutransを探している場合は、asuhistrも含める必要があります。

関連する問題