2011-09-08 112 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为没有项目资金。