2016-10-03 2 views
1

Я пытаюсь написать некоторый SQL, чтобы позволить мне подобрать возможные дублированные записи, которые будут иметь одинаковое денежное значение и дату транзакции, но которые могли иметь ссылочный ввод счета несколько разными способами ,SQL, чтобы найти дубликаты счетов в Agresso

Я просмотрел примеры SQL, используя «GROUP» и «HAVING», но я ошибаюсь где-то, и мой 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), но это на самом деле возвращает данные, которые я не понимаю. Это результат первого указанного идентификатора поставщика в гораздо более длинном списке, включающем различных поставщиков, даты и суммы транзакций;

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

Какая СУБД вы используете? –

ответ

0

Вы смотрите в таблице со всей транзакционной информацией, вы должны смотреть только на линии управления AP, которые хранятся в таблице asutrans. Это непроверено, но вы должны получить всю необходимую информацию, чтобы сделать осознанный выбор о том, произошла ли ошибка.

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

Вы должны также включить asuhistr, если вы ищете asutrans.

Смежные вопросы