如果这是一个非常基本的问题我很抱歉,但我对使用Access和数据库管理和设计非常陌生。
我正在进行一项调查,要求现场调查员完成作业。这些分配由员工ID,站点位置,日期和6小时时间块组成。对于任何给定的分配,可以有1个站点位置或2个(员工将分配两个站点之间的时间间隔)。我有兴趣运行查找重复查询,以查找一个月内不止一次访问网站的所有日子。
我的数据集看起来像这样:
SiteID1 SiteID2 Date StartTime EndTime EmployeeID
1646 1646 03/11 11:00 17:00 0000
1646 1646 03/03 11:00 17:00 0002
4242 1646 03/19 11:00 17:00 0001
1646 4242 03/11 08:00 14:00 0000
我使用查询向导运行查询,以查找SiteID1
和SiteID2
字段中的重复项。它只返回1,2和4记录。我希望它也能返回第3条记录。如何更改我的查询,以便在SiteID1
或SiteID2
字段中查找重复项,而不是专门处理它们?我实际上甚至不确定为什么它没有返回此记录,因为它仍然在SiteID2
字段中共享重复数据。
提前致谢。
答案 0 :(得分:0)
这可以帮助您安排列值以获得所需的摘要:
SELECT
IIF( SiteID1 > SiteID2 , SiteID2, Siteid1)
, IIF( SiteID1 >= SiteID2 , SiteID1, Siteid2)
, Date
, COUNT(*)
FROM Sheet1
GROUP BY
IIF( SiteID1 > SiteID2 , SiteID2, Siteid1)
, IIF( SiteID1 >= SiteID2 , SiteID1, Siteid2)
, Date
;
IIF()调用需要交换的值(例如1646/4242和4242/1646被视为相等。
然后,您可以使用HAVING子句仅查找计数大于1或2的行,例如
SELECT
IIF( SiteID1 > SiteID2 , SiteID2, Siteid1)
, IIF( SiteID1 >= SiteID2 , SiteID1, Siteid2)
, Date
FROM Sheet1
GROUP BY
IIF( SiteID1 > SiteID2 , SiteID2, Siteid1)
, IIF( SiteID1 >= SiteID2 , SiteID1, Siteid2)
, Date
HAVING COUNT(*) > 2
;
注意,在使用having子句时,您不必将COUNT(*)
包含为可见列,但是您可以同时执行这两项操作,这是很常见的事情。
由于您不熟悉SQL,因此值得注意的是,许多其他SQL投诉数据库不支持IIF(),而是使用案例表达式。同样在许多其他数据库中,单词date
可能是一个保留字,因此您需要小心使用它,如下所示:
SELECT
case when SiteID1 > SiteID2 then SiteID2 else Siteid1 end
, case when SiteID1 >= SiteID2 then SiteID1 else Siteid2 end
, "Date"
FROM Sheet1
GROUP BY
case when SiteID1 > SiteID2 then SiteID2 else Siteid1 end
, case when SiteID1 >= SiteID2 then SiteID1 else Siteid2 end
, "Date"
HAVING COUNT(*) > 2
;
我建议你不要使用date
这个词作为列名,让它更有意义,例如AssignmentDate