2011-10-10 33 views
1

我有3个表客户(cid,姓名,电话)和交易(cid(参考),fundid,日期,股票)和基金(fundid,fund_name)。SQL:通过多个表获取客户的总股份

我想写一个sql查询,让我每个基金的每个客户的股份总数。

这里有样品插入:

INSERT INTO CUSTOMER(1, 'Alex', '123456678'); 

INSERT INTO CUSTOMER(2, 'Bill', '6323450236'); 

INSERT INTO CUSTOMER(3, 'Marie', '8568289912'); 



INSERT INTO FUND (1, 'Docotel'); 

INSERT INTO FUND (2, 'Armen'); 

INSERT INTO FUND (3, 'TD'); 




INSERT INTO TRANSACTIONS(1, 2, '2010-2-12', 234); (means shares bought) 

INSERT INTO TRANSACTIONS(3, 1, '2010-4-2', 192); 

INSERT INTO TRANSACTIONS(1, 2, '2010-4-22', -45); (the '-' means shares sold) 

INSERT INTO TRANSACTIONS(1, 3, '2010-4-26', 220); 

INSERT INTO TRANSACTIONS(3, 2, '2010-7-21', 170); 

我想要的SQL结果看起来是这样的:

Name| Fund_Name | Total_Shares | 

Alex Docotel 189 

Alex TD 220 

Marie Docotel 192 

Marie Armen 170 

感谢

回答

1

试试这个:

SELECT customer.name, fund.fund_name, T1.total_shares 
FROM 
(
    SELECT cid, fundid, SUM(shares) AS total_shares 
    FROM transactions 
    GROUP BY cid, fundid 
) T1 
JOIN customer ON T1.cid = customer.cid 
JOIN fund ON T1.fundid = fund.fundid 
ORDER BY customer.name 
+0

会这考虑到股票买入的结果股票卖出了?我的意思是这会导致Alex的Docotel股票被买入 - Alex的Docotel股票被卖出? –

+0

是的,我觉得做你想要的。 –

+0

谢谢..它像一个魅力工作:D ..我只需要添加总和(T1.total_shares)来获得我想要的结果。 –

相关问题