我发现一个奇怪的情况,表中没有重复项,但基于此表的查询和报表有几个重复项。大约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;
有什么建议吗?
答案 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条件,以便在有多个时返回一行。