2013-07-26 45 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