SQL将按年份插入子表-避免重复

SQL将按年份插入子表-避免重复,sql,sql-server,Sql,Sql Server,我的SQL数据库中有两个表:父表和子表父表的主键是子表的外键-ID。子表中的复合键是ID,Year 父级中有数据,但子级为空。我需要填写如下所述的子表: 家长: ID StartYear EndYear 1 2016 2020 1 2019 2021 2 2018 2022 儿童: ID Year Factor 1 2016 1 1 2017 1 1 2018 1 1 2019 1

我的SQL数据库中有两个表:父表和子表父表的主键是子表的外键-ID。子表中的复合键是ID,Year

父级中有数据,但子级为空。我需要填写如下所述的子表:

家长:

ID  StartYear  EndYear
1     2016      2020
1     2019      2021
2     2018      2022
儿童:

ID  Year    Factor
1   2016     1
1   2017     1
1   2018     1
1   2019     1
1   2020     1
1   2021     1
2   2018     1
2   2019     1
2   2020     1
2   2021     1
2   2022     1
我可以使用查询或过程来执行此操作

问题类似于


但是在这里,子键is ID,year中不能有重复的行,而父键对于特定ID有一些重叠的年份。

您可以使用递归CTE来解决此问题。至于由于年份重叠而产生的重复项,只需使用distinct即可


您不需要第一次出现来自父级或rcte的{StartYear]。我认为这对我不起作用。需要第一次出现来自父级的StartYear,如果子级中存在任何ID的StartYear和EndYear之间的任何年份,则不会插入该行。我听起来对吗?我已经编辑了查询以删除StartYear。在rcte是递归查询的起始年份。
; with
rcte as
(
    select [ID], [EndYear], [StartYear] as [Year]
    from   Parent

    union all

    select [ID], [EndYear], [Year] + 1 as [Year]
    from   rcte
    where  [Year] < [EndYear]
)
insert into child ([ID], [Year], [Factor])
select distinct [ID], [Year], 1 as [Factor] 
from   rcte