我的合同编号1涵盖2022年8月1日至2024年7月31日,我需要将所有有效合同拆分为多行,每行涵盖365天/年。现有表-EX-合同1涵盖2022年8月1日至2024年7月31日,我需要将合同1从8/1/2022拆分到7/31/2023(在第1行),将合同1从8/1/2023拆分到7/31/2024(在第2行)(合同第二年)与wise第三年(2024年8月1日至2025年7月31日)相同。
| 合同|开始日期|结束日期|
| - ------|- ------|- ------|
| 1个|2022年8月1日|二〇二四年七月三十一日|
| 二十三|2022年8月7日|2023年8月8日|
| 二十六|2022年6月8日|2025年6月9日|
我需要上面的table分开
| S.No|合同|开始日期|结束日期|
| - ------|- ------|- ------|- ------|
| 1个|1个|2022年8月1日|二零二三年七月三十一日|
| 第二章|1个|2023年8月1日|二〇二四年七月三十一日|
| 三个|二十三|2022年8月7日|2023年8月8日|
| 四个|二十六|2022年6月8日|二〇二三年六月七日|
| 五个|二十六|2023年6月8日|2024年6月7日|
| 六个|二十六|2024年6月8日|2025年6月7日|
2条答案
按热度按时间n6lpvg4x1#
以下内容将确定任何合同的最大可能年数,生成一个数字序列0..N,计算每个合同的每个潜在全年,然后调整结果以反映实际合同结束日期。
如果使用SQL Server 2022,则可以将NumTable CTE替换为
GENERATE_SERIES()
函数,并且可以将CASE
表达式替换为LEAST()
。结果:
| 合同|开始日期|结束日期|
| - ------|- ------|- ------|
| 1个|2022年8月1日|二〇二三年七月三十一日|
| 1个|2023年8月1日|二○二四年七月三十一日|
| 二十三|2022年8月7日|二〇二三年八月六日|
| 二十三|2023年8月7日|2023年8月8日|
| 二十六|2022年6月8日|二〇二三年六月七日|
| 二十六|二〇二三年六月八日|二○二四年六月七日|
| 二十六|二○二四年六月八日|二〇二五年六月七日|
| 二十六|二○二五年六月八日|二○二五年六月九日|
上述结果与OP要求的结果略有不同,但我认为根据所述要求,这是正确的。
参见this db<>fiddle。
11dmarpk2#
您可以尝试以下递归CTE:
See demo