Tsql 我如何生成一份报告来显示员工缺勤的次数

Tsql 我如何生成一份报告来显示员工缺勤的次数,tsql,Tsql,我被要求生成一份报告,显示员工因病缺勤的次数 如果员工连续3天缺勤,则视为1次缺勤。如果他们随后返回工作,然后又连续两天缺席,则记录为两次 我需要生成一份报告,显示员工在6个月内因病缺勤的次数 我在下面列出了一个数据示例,显示了员工的缺勤记录以及我需要报告的外观 数据在数据库中的显示方式: 姓名缺勤日期 约翰·史密斯19年9月1日 约翰·史密斯19年9月2日 约翰·史密斯19年9月3日 约翰·史密斯19年9月10日 约翰·史密斯19年9月11日 我希望报告的内容如下: 名称出现次数 约翰·史密

我被要求生成一份报告,显示员工因病缺勤的次数

如果员工连续3天缺勤,则视为1次缺勤。如果他们随后返回工作,然后又连续两天缺席,则记录为两次

我需要生成一份报告,显示员工在6个月内因病缺勤的次数

我在下面列出了一个数据示例,显示了员工的缺勤记录以及我需要报告的外观

数据在数据库中的显示方式:

姓名缺勤日期 约翰·史密斯19年9月1日 约翰·史密斯19年9月2日 约翰·史密斯19年9月3日 约翰·史密斯19年9月10日 约翰·史密斯19年9月11日

我希望报告的内容如下: 名称出现次数 约翰·史密斯2


如果您能帮助我编写代码以实现此结果,我将不胜感激。

这不是一个完整的答案,因为您确实应该自己做一些,但是,根据您在问题中的详细信息,您可以使用下面的方法计算6个月内的缺勤时间

假设您将使用SQL Server编译此文件

declare @absences table (empid nvarchar(10), [abs date] date, [ret date] date);
declare @staff table ([empid] int, [name1] nvarchar(50), [name2] nvarchar(50), [surname] nvarchar(50));

-- put some test values in the staff table to work with
insert into @staff
values 
(1, 'John', 'Lewis', 'Smith'), -- using a unique ID here, in any good system this should be an incremental number for each new staff member added to the table
(2, 'James', 'Thomas', 'Brown') 

-- put some test values in the absences table to work with
insert into @absences
values 
(1, '2019-07-01', '2019-07-04'), -- userid, absence date & return date
(1, '2019-08-04', '2019-08-06'),
(2, '2019-07-02', '2019-07-05'),
(2, '2019-08-05', '2019-08-07')

select count(*) spellsoff, empid, name1, name2, surname, [days absent]
from
(
  select 
  s.empid,
  s.name1,
  s.name2,
  s.surname,
  a.[abs date],
  a.[ret date],
  datediff(d,a.[abs date], a.[ret date]) [days absent]
from @staff s
  left join @absences a
  on s.empid = a.empid
where [abs date] >= DATEADD(M,-6,GETDATE()) -- pull back those employeess that have been absent in the last 6 months from today's date
)doff
group by empid, name1, name2, surname, [days absent]
提供以下细分:

spellsoff   empid   name1   name2   surname days absent
   1          1     John    Lewis   Smith       2
   1          1     John    Lewis   Smith       3
   1          2     James   Thomas  Brown       2
   1          2     James   Thomas  Brown       3

嗨,劳拉-这看起来很像家庭作业;)请举例说明您的尝试和坚持。只需在您的数据模型上做一个说明,如果您没有重新返回日期,则无法确定此人离开工作的时间。此外,如果您的系统中有多个John Smith,如何确定谁是谁?您应该在数据模型中为每个员工使用唯一的ID,该ID对于该员工是唯一的。您好,Markoorm-感谢您的回复。我可以向你保证,这不是家庭作业,而是我的雇主要求的一份报告,用于跟踪员工缺勤情况。