SQL将按年份插入子表-避免重复
我的SQL数据库中有两个表:父表和子表父表的主键是子表的外键-ID。子表中的复合键是ID,Year 父级中有数据,但子级为空。我需要填写如下所述的子表: 家长: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
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