SELECT <Список полей1>, SumFromT2
FROM table1
LEFT JOIN
( SELECT model, SUM(sale_quantity) AS SumFromT2 FROM table2 GROUP BY model) AS T2
ON table1.model = T2.model
WHERE <Уловия ограничивающие финальную выборку>
SELECT usid, SUM(sum) AS sDEP FROM fc_deposit GROUP BY usid // Депозиты юзера
SELECT usid, SUM(sum) AS sBAL FROM fc_bal_ins GROUP BY usid // Списания юзера
SELECT refname, sDEP-sBAL FROM fc_users
LEFT JOIN (Депозиты юзера) ON условие_соединения
LEFT JOIN (Списания юзера) ON условие_соединения
Вначале я бы сформировал запрос содержащий ВСЕ поля участвующие в условиях типа
SELECT TOP 20 DISTINCT {Все поля участвующие в условиях} FROM T
LEFT JOIN {Все таблицы} ON {Условия связей}
После того как я убедился бы что запрос получает правильные данные, я бы преобразовал его
SELECT TOP 20 DISTINCT {Все поля участвующие в условиях} {Функция для having} FROM T
LEFT JOIN {Все таблицы} ON {Условия связей}
group by {Все поля участвующие в условиях}
Снова убедимся что {Функция для having} возвращает то что должно быть и добавляем
having {Функция для having}
Это может быть связано также с законодательством. Так например хранить персональные данные обязательно на территории РФ; В связи с чем разделение бд на такие данные имеет смысл.