2011-09-08 132 views
1

我有兩個表:基金和項目。物品有一個名爲fundID的字段,與基金錶的ID相關。物品也有一個價格字段。SQL Sum()與相關的子查詢

下面是這兩個表的一個簡單的例子:

FUND 
ID fundName 
1  maintenance 
2  books 
3  development 
4  media 


ITEMS 
ID price fundID 
1  $10  2 
2  $20  4 
3  $5   4 
4  $8   1 
5  $10  3 
6  $12  4 

我想創建一個查詢,這將使我每個基金的名稱以及通過連接到該基金的所有價格的物品總和fundID字段。我已經嘗試了幾種方法,例如在SUM()和WHERE內部都有相關的子查詢,並且出現錯誤。

如果有人能指出我正確的方向,我會很感激。

+0

sql server?我的SQL?甲骨文?版本?它總是有助於:-) – EBarr

+0

實際上,SharePoint 2010列出了一個Access前端。實際的SQL服務器是MS SQL(不知道哪個版本)。 – penco

回答

3

試試這個:

SELECT f.fundname, 
     SUM(i.price) 
FROM fund f 
     JOIN items i 
     ON i.fundid = f.id 
GROUP BY f.fundname 
+0

+1上帝詛咒,你打敗我吧! – Icarus

+0

將JOIN更改爲LEFT JOIN並像魅力一樣工作。謝謝! – penco

+0

當我在代碼的SELECT部分​​中輸入更多字段時,爲什麼它停止工作?例如,f.fundCode和fund.fundCode都會引發不同的錯誤消息。 – penco

0

試試這個

select fundName,sum(price) as TotPrice 
from Funds f 
join Items g on g.id=f.id 
group by f.fundName 
0
SELECT f.fundid, f.fundName, SUM(price) 
FROM Fund f 
    INNER JOIN ITEMS i ON i.fundId = f.fundId 
GROUP BY f.FUNDID 

如果你有大量的基金中的基金ID由

2

到組可能會更好有沒有很好的理由在給定表結構的情況下以這種方式進行,但是問題確實會詢問子查詢,並簡化了表結構。

因此,這將產生相同的結果straightfoward JOIN/GROUP BY

SELECT f.fundname, 
     coalesce(i.price,0) price 
FROM fund f 
     LEFT JOIN (SELECT fundid, 
          SUM(price) price 
        FROM items i 
        GROUP BY fundid) i 
     ON f.fundid = i.fundid 

注聚結/ LEFT JOIN有如果你想0爲沒有項目資金。