Я пытаюсь получить сумму строк при применении левого соединения с более чем одной таблицей. Кажется, он создает матрицу результата, которая приводит к неправильной функции суммы.Левое соединение с суммой с более чем 1 таблицей дает неправильную сумму
Пример:
первой таблицы: Клиент
второй таблице: TotalAssets
третьей таблице: TotalLiability
Структура таблицы:
Заказчик
CustID(int) CustomerName(varchar)
1 Abc
2 Def
3 Ghi
TotalAssets
CustID Amount
1 2000
1 1000
2 600
TotalLiability
CustID Amount
1 1000
1 1000
2 800
Выход Ожидаемое
CustID TotalAssets TotalLiability
1 3000 2000
2 600 800
Текущий запрос
Select c.CustID , Sum(a.Amount) , Sum(l.Amount) From Customer c
left join TotalAssests a on a.CustID = c.CustID
left join TotalLiability l on l.CustID = c.CustID
Group by c.CustID
Проблема с этим текущим запросом является сумма не является правильным, как я думаю, что первый слева присоединиться к созданию первого набора с несколькими записями, а затем второй один применяется.
Любая помощь приветствуется
UPDATE:
Я нахожу немного удачи, следуя методу, но это, кажется, плохой/Hacky вариант, как в моем случае, у меня есть более 7-8 элементов в группе и от добавление большего количества левых предложений приводит к сложному управлению запросами.
Новый запрос, который в результате правильный результат, но выглядит очень плохо поддерживает
Select Set1.CustID , Set1.TotalAssets, Sum(l.Amount) from (Select c.CustID , Sum(a.Amount) as TotalAssets From Customer c
left join TotalAssests a on a.CustID = c.CustID
Group by c.CustID)Set1
left join TotalLiability l on l.CustID = Set1.CustID.
Group by Set1.CustID , Set1.TotalAssets
Что неожиданный результат? – artm
И какой результат вы получаете? Не заставляйте нас анализировать структуру таблиц и создавать собственные тестовые данные. – Blorgbeard
@artm Я переписал свой вопрос с образцом вывода и коротким запросом с образцами данных. –