SQL - 根据 2 个日期之间的天数从 1 条记录创建多条记录

SQL - Create multiple records from 1 record based on days between 2 dates

我有一个 table 持有员工休假。如果员工连续休假超过 1 天,例如 22-05-2020 到 26-05-2020,这将显示为一条记录。我正在尝试将其显示为 5 条记录,一条代表他们休息的每一天。

我的table叫:Emp_Annual_Leave 并具有以下字段

emp_no      leave_type      leave_year      half_day    start_date  end_date    days_of_leave
12345       Annual          2020            N           22/05/2020  26/05/2020  5

以上是当前显示的方式,我正在尝试如下所示显示以上记录:

emp_no  leave_type  leave_year  half_day    start_date  end_date    days_of_leave   leave_date
12345   Annual      2020        N           22/05/2020  26/05/2020  1               22/05/2020
12345   Annual      2020        N           22/05/2020  26/05/2020  1               23/05/2020
12345   Annual      2020        N           22/05/2020  26/05/2020  1               24/05/2020
12345   Annual      2020        N           22/05/2020  26/05/2020  1               25/05/2020
12345   Annual      2020        N           22/05/2020  26/05/2020  1               26/05/2020

有谁知道我会这样做吗?我有一种感觉,我需要使用 ROW_NUMBER() OVER(PARTITION BY),但我所做的任何尝试都不适合我。

提前致谢,

编辑: 我需要在此处创建的 table 是一个更大查询中的子查询,需要重新连接到我的数据库中的其他查询和 table。我没有将此作为我的原始问题的一部分,更新为现在包括在内,以防这影响我需要使用的方法

您可以使用递归查询:

with cte as (
    select emp_no, leave_type, leave_year, half_day, start_date, end_date, days_of_leave, start_date as leave_date from emp_annual_leave 
    union all
    select emp_no, leave_type, leave_year, half_day, start_date, end_date, days_of_leave, dateadd(day, 1, leave_date)
    from cte
    where leave_date < end_date
)
select * from cte

如果给定的休假可能超过 100 天,您需要在查询末尾添加 option (maxrecursion 0)