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)
。
我有一个 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)
。