求和的双值

时间:2017-07-05 15:05:28

标签: sql ms-access

我目前正在使用访问权来跟踪我的stockportfolio。它包含~20个表。我使用查询来包含要导出到excel的最重要数据。两个数据表包括两个相同但具有不同值的名称。这导致总和Mkt_Value,Contr和Vol(在代码中显示)以获得双重估值。

从谷歌搜索我认为它必须使用子选择和左连接以外的东西。问题是我主要使用查询向导进行此查询,所以我不确定如何解决这个问题。任何指导将不胜感激!

我发布了包含导致问题的四个表的代码的摘录:tbl_datum(Da​​te table),tbl_positions,tbl_ARMSpositions和tbl_ARMSgreeks。

提前致谢!

SELECT
tbl_Positions.ARMSNAME, 
tbl_Positions.Uploaddate, 
Sum(tbl_ARMSpositions.Mkt_Value), 
Sum(tbl_ARMSpositions.Contr), 
Sum(tbl_ARMSgreeks.Vol)


FROM 
((tbl_Datum INNER JOIN tbl_Positions ON tbl_Datum.Datum = tbl_Positions.UploadDate) 

LEFT JOIN 
tbl_ARMSpositions ON (tbl_Positions.Uploaddate = tbl_ARMSpositions.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSpositions.Name)) 

LEFT JOIN 
tbl_ARMSgreeks ON (tbl_Positions.Uploaddate = tbl_ARMSgreeks.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSgreeks.Name)


GROUP BY 
tbl_Positions.ARMSNAME, 
tbl_Positions.Uploaddate;

1 个答案:

答案 0 :(得分:0)

如果没有看到您的数据,我将不得不猜测。根据您的描述和评论,由于表tbl_ARMSpositions中的数据,听起来您有笛卡尔积。我认为对您的查询的这种修改应该解决它:

SELECT
   tbl_Positions.ARMSNAME, 
   tbl_Positions.Uploaddate, 
   Sum(tbl_ARMSpositions.Mkt_Value), 
   Sum(tbl_ARMSpositions.Contr), 
   Sum(tbl_ARMSgreeks.Vol)
FROM 
   (  (tbl_Datum INNER JOIN tbl_Positions ON tbl_Datum.Datum = tbl_Positions.UploadDate) 
      LEFT JOIN 
      (SELECT DISTINCT Value_Date, Name FROM tbl_ARMSpositions) AS tbl_ARMSpositions ON (tbl_Positions.Uploaddate = tbl_ARMSpositions.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSpositions.Name)
   ) 
   LEFT JOIN 
   tbl_ARMSgreeks ON (tbl_Positions.Uploaddate = tbl_ARMSgreeks.Value_Date) AND (tbl_Positions.ARMSNAME = tbl_ARMSgreeks.Name)
GROUP BY 
   tbl_Positions.ARMSNAME, 
   tbl_Positions.Uploaddate;