2012-02-20 2 views
0

Я использую довольно старый запрос Microsoft, который поставляется с Excel для запроса базы данных ODBC. Однако это приносит мне неправильную сумму, когда я присоединяюсь к двум таблицам.SQL-запрос, дающий неправильную сумму

Это прекрасно работает:

SELECT accountcode, SUM(tr_amount) 
FROM deb_trans deb_trans 
WHERE (today() > dr_tr_due_date + 14) 
GROUP BY accountcode 

Однако это не делает:

SELECT deb_trans.accountcode, Sum(deb_trans.tr_amount) 
FROM deb_trans deb_trans, mailer_master mailer_master 
WHERE (today()>dr_tr_due_date+14) AND (mailer_master.accountcode=deb_trans.accountcode) 
GROUP BY deb_trans.accountcode 

соединенного поля является accountcode.

Поле tr_amount orginates из таблицы deb_trans. Его нет в mailer_master.

Любые идеи? Спасибо, парни!

+2

Если между двумя таблицами нет соответствия 1: 1, вы не можете ожидать получить тот же SUM. Например, если две строки в mailer_master присоединяются к одной из строк в deb_trans, тогда tr_amount будет добавляться дважды для этой строки deb_trans. –

+0

Спасибо. Это одно (mailer_master) -many (deb_trans) соответствие. Deb_trans имеет всю критическую информацию. Я просто хочу приложить дополнительные поля, которые mailer_master имеет через общий код учетной записи. – halohunter

+0

При добавлении второй таблицы SUM становится больше или меньше? –

ответ

1

Если вы присоединитесь к таблицам, вы получите строку для каждой комбинации, которая соответствует критериям фильтра до ее сгруппировки. В этом случае: строка для каждой комбинации deb_trans и mailer_master, отфильтрованной по дате. Если вы хотите получить действительную сумму, вам не следует присоединяться к другой таблице так, как изменяется количество строк (до группировки).

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