我有两个独立的表,tbl_timesheet和tbl_absence。员工登录系统后,tbl_timesheet每天都会有一行。 tbl_absence是一行,用于唯一的缺勤实例,即员工不在工作中。每个表如下所示:
tbl_timesheet:
Staff_ID DEPT LOG_DATE
001 IT 2020-09-01
002 HR 2020-09-01
003 SALES 2020-09-01
001 IT 2020-09-02
002 HR 2020-09-02
003 SALES 2020-09-02
001 IT 2020-09-03
002 HR 2020-09-03
003 SALES 2020-09-03
tbl_absence:
Staff_ID ABSENCE_DATE
001 2020-09-10
003 2020-09-15
003 2020-09-22
我想加入两个表,在那里我可以计算缺勤的情况。我尝试使用以下脚本来执行此操作:
SELECT t.Staff_ID as ID, t.DEPT as Dept, COUNT(a.Staff_ID) as 'Instances'
FROM tbl_timesheet t
JOIN tbl.absence a
ON t.Staff_ID = a.Staff_ID
GROUP BY t.Staff_ID, t.DEPT
我期望以下几点:
ID Dept Instances
001 IT 1
003 SALES 2
但是由于表之间的连接,我相信Staff_ID是重复的,因为每个ID在tbl_timesheet中出现多次。
有什么建议吗?
答案 0 :(得分:2)
当您在获得Staff_Id和Dept的不同值之前先联接两个表时,它将使记录的计数相乘。例如,staff_id ='003'缺勤表中的2条记录与时间表中的3条记录相乘,您将获得6条记录。因此,您可以按照以下代码进行编码。
SELECT
t.Staff_ID as ID,
t.DEPT as Dept,
-----------
COUNT(a.Staff_ID) as Instances
-----------
FROM tbl_absence a
JOIN (select distinct Staff_ID, DEPT FROM tbl_timesheet) t
ON t.Staff_ID = a.Staff_ID
GROUP BY t.Staff_ID, t.DEPT