访问表没有重复项,但基于该表的查询和报告有几个重复项

时间:2014-01-31 01:26:06

标签: sql ms-access duplicates

我发现一个奇怪的情况,表中没有重复项,但基于此表的查询和报表有几个重复项。大约200条记录中有3条重复。重复计算并包含在报告中的总和中。

该表是时间表。该报告由基于SQL语句的宏创建。在宏中组装的SQL语句(在立即窗口中捕获)是以下字符串:

 SELECT * FROM qry_slct_Layer_1A_min_calc_all_fields 
 WHERE qry_slct_Layer_1A_min_calc_all_fields.Start >=#1/1/2013#  
      AND qry_slct_Layer_1A_min_calc_all_fields.Start <=#12/31/2013 11:59:59 PM# 
 ORDER BY qry_slct_Layer_1A_min_calc_all_fields.Start;

当我将此SQL字符串粘贴到一个全新的查询中时,我在输出中得到相同的重复项。

上面引用的查询qry_slct_Layer_1A_min_calc_all_fields的SQL如下:

  SELECT tbl_raw_data.ID, tbl_raw_data.Subject, tbl_raw_data.Start, 
         tbl_raw_data.Duration AS Duration_m, tbl_raw_data.Categories, 
         tbl_raw_data.Body, tbl_raw_data.Project_Code AS Project_Only, 
         tbl_raw_data.Class_Code AS Class, tbl_raw_data.Staff_Code AS Staff, 
         tbl_raw_data.Duration_h, tblStaff.Rate, 
         [Duration_h]*[Rate] AS Line_Total, 
         strProjectDependingOnClass_fromCategories([categories]) AS Project_with_class

  FROM tblStaff INNER JOIN tbl_raw_data ON tblStaff.Abbrev = tbl_raw_data.Staff_Code

  ORDER BY tbl_raw_data.Start;

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您说“表没有重复”,但子查询中有两个表(tblStaff和tbl_raw_data)。假设每个tblStaff.Abbrev(您的对象名称很糟糕,BTW)是唯一的,这意味着您在tbl_raw_data中有三条记录,其Staff_Code值也在另一条记录中找到(即tbl_raw_data.Staff_Code不是唯一的)。 INNER JOIN将获取tbl_raw_data中的所有匹配行 - 您需要优化ON条件,以便在有多个时返回一行。