我目前正在使用访问权来跟踪我的stockportfolio。它包含~20个表。我使用查询来包含要导出到excel的最重要数据。两个数据表包括两个相同但具有不同值的名称。这导致总和Mkt_Value,Contr和Vol(在代码中显示)以获得双重估值。
从谷歌搜索我认为它必须使用子选择和左连接以外的东西。问题是我主要使用查询向导进行此查询,所以我不确定如何解决这个问题。任何指导将不胜感激!
我发布了包含导致问题的四个表的代码的摘录:tbl_datum(Date 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;
答案 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;