2013-07-26 3 views
4

Я пытаюсь выполнить запрос для отображения баланса клиентов вместе с суммой нескольких платежей, связанных с клиентом, поэтому я могу проверить, соответствует ли общий баланс объединенному балансу.Соберите сумму комбинированных значений

Я думаю, что мне нужно использовать GROUP BY в моем запросе, но пока это оказалось безуспешным. Моя попытка выглядит следующим образом:

select c.ID, m.Balance, SUM(chg.Balance) as CombinedBalance 
from Customer c 
INNER JOIN ChargeTemplate chg 
on c.ID = chg.CustomerID 
WHERE c.Balance <> (SELECT SUM(Balance) FROM ChargeTemplate WHERE chg.CustomerID= c.ID) 
GROUP BY c.ID, c.Balance 
order by c.ID ASC 

Этого запрос выводит общий баланс и общий суммарный баланс, но он также отображает запись, где c.Balance равно Комбинированный баланс.

Следующий запрос выполняет то же самое, что и указанный выше запрос, , хотя я удалил предложение WHERE.

select c.ID, c.Balance, SUM(chg.Balance) as CombinedBalance 
from Customer c 
INNER JOIN ChargeTemplate chg 
on c.ID = chg.CustomerID 
GROUP BY c.ID, c.Balance 
order by c.ID ASC 

Мой требуемый выход значение CUSTOMERTABLE.BALANCE с соответствующим общей сложностью обвинения клиентов - таким образом, я могу сравнить фактический баланс соответствует суммарному количеству. Как я могу сделать это реальностью?

Примечание: chargetable имеет CustomerTable.CustomerID FK

enter image description here

Клиент 1:

CUSTOMERTABLE.TOTAL_BALANCE = 100.00 
CHARGETABLE.CHARGE[1].BALANCE = 20.00 
CHARGETABLE.CHARGE[2].BALANCE = 30.00 
CHARGETABLE.CHARGE[3].BALANCE = 50.00 

Клиент 2:

CHARGETABLE.CHARGE[1].BALANCE = 10.00 
CHARGETABLE.CHARGE[2].BALANCE = 20.00 
CHARGETABLE.CHARGE[3].BALANCE = 30.00 
CHARGETABLE.CHARGE[4].BALANCE = 90.00 
CHARGETABLE.CHARGE[5].BALANCE = 50.00 

ответ

3

Для фильтрации на агрегатах, используйте HAVING

Select 
    c.ID, m.Balance, Sum(chg.Balance) as CombinedBalance 
From 
    Customer c 
     Inner Join 
    ChargeTemplate chg 
     On c.ID = chg.CustomerID 
Group By 
    c.ID, c.Balance 
Having 
    m.Balance != Sum(chg.Balance) 
Order By 
    c.ID ASC 
+0

Отлично .. спасибо Лоуренс .. выполнил эту работу. Очень признателен. – Kev

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