MS Access总计查询和字段不正确的结果

时间:2018-04-26 15:48:03

标签: ms-access sum distinct

我已经构建了我认为是MS Access中的简单查询。

涉及两个表:

  • 属性
  • 历史

历史记录表包含每个属性和不同日期的多行数据 我试图在属性表中共享公共区域的属性的特定日期显示net_value的总和。

这是我的疑问:

SELECT      Properties.Area
            , History.HIST_DATE
            , History.ID
            , Sum(History.NET_VALUE) AS SumOfNET_VALUE
FROM        Properties INNER JOIN History ON Properties.ID = History.ID
WHERE       (((History.Account_ID)=45))
GROUP BY    Properties.Area, History.HIST_DATE, History.ID
HAVING      (((Properties.Area)="MY AREA") AND 
             ((History.HIST_DATE)=#2/1/2017#));

问题是,sum字段非常不正确。

调试

问题的根本原因是Properties.ID有多个条目。 所以我认为选择不明显?有没有办法解决这个问题? Properties.ID实际上是一个帐户标识符,可以与多个属性相关联;所以我无法将Properties.ID限制为每个ID一个记录...想法?

2 个答案:

答案 0 :(得分:1)

看起来History.ID是一个独特的字段,或者至少对每个属性都是唯一的 通过将其包含在您的查询中,总和将对该ID以及区域进行分组,因此您最终会得到每个区域的每个属性的总数。

不知道Account_ID何处进入,但无论如何都已将其包含在WHERE子句中。

SELECT        Properties.Area
            , History.Hist_Date
            , SUM(History.Net_Value) AS Total_Net_Value
FROM        Properties LEFT JOIN History ON Properties.ID = History.ID
WHERE       History.Account_ID = 45 AND 
            Properties.Area = "My Area"
            History.Hist_Date=#04/27/2018#
GROUP BY      Properties.Area 
            , History.Hist_Date

答案 1 :(得分:0)

试试这个:

SELECT      Properties.Area
            , History.HIST_DATE
            , History.ID
            , Sum(History.NET_VALUE) AS SumOfNET_VALUE
FROM        Properties INNER JOIN History ON Properties.ID = History.ID
WHERE       ((History.Account_ID)=45) 
              AND (Properties.Area)="MY AREA" 
              AND (History.HIST_DATE)=#2/1/2017#))
GROUP BY    Properties.Area, History.HIST_DATE, History.ID;

除聚合函数外,不要将HAVING子句用作Filter,请参阅here。请改用WHERE Part。

例如,对于...HAVING SumOfNET_VALUE > 200来说,HAVING是合理的。