У меня есть 2 таблицы, к которым мне нужно запросить и вернуть результирующий набор «исключений», основанный на том, равна ли сумма поля в таблице1 сумме поля в таблице2 (где совпадают другие столбцы).
select A.TranName,A.TranDate,A.TranCode,SUM(A.TranQty) AS T1Qty,B.TranName,B.TranDate,B.TranCode,SUM(B.TranQty) AS T2Qty
from Table1 AS A
LEFT JOIN Table2 AS B
on A.TranName = B.TranName AND A.TranDate = B.TranDate AND A.TranCode = B.TranCode
GROUP BY A.TranName, A.TranDate, A.TranCode, B.TranName, B.TranDate, B.TranCode
HAVING SUM(A.TranQty) != SUM(B.TranQty)
Результирующий набор неверен, поскольку он умножает сумму Table1.TranQty на количество строк, возвращаемых из Table2.
Например, если в Table1 была 1 запись, где объединение совпало с 2 записями вВ таблице 2 значение TranQty из 1 записи в таблице 1 будет умножено на 2 (и, следовательно, будет совпадать неправильно).
Я уверен, что мне не хватает чего-то базового в использовании агрегатной функции (суммы) в левом соединении,
Спасибо за помощь!
(Система MSSql)