连接表SQL时遇到COUNT()值的问题

时间:2020-10-02 16:09:10

标签: sql sql-server join

我有两个独立的表,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中出现多次。

有什么建议吗?

1 个答案:

答案 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
相关问题