SQL 每年保修的总财务风险

Total Financial exposure per year for warranty in SQL

我在 SQL Server 2019.

我遇到了一个看似很简单的问题,但是我卡住了。

我需要在 SQL 中创建一个视图,用于计算每年我们项目保修的总财务风险。

每个项目都有多个保修条款(但它们对于此计算无关紧要)。我只对整个公司的财务风险感兴趣。

例子table是:

项目编号 保修期限 财务风险 保修期开始 保修期结束
项目 1 绘画 1,000,000 2021 年 1 月 1 日 2023 年 1 月 1 日
项目 2 结构 500,000 2021 年 5 月 15 日 2031 年 5 月 15 日
项目 3 绘画 1,000,000 2022 年 3 月 25 日 2042 年 3 月 24 日
项目 3 性能 5,000,000 2022 年 3 月 25 日 2030 年 3 月 25 日
项目 4 正常运行时间 10,000,000 2023 年 1 月 1 日 2033 年 1 月 1 日

我正在寻找类似的东西:

年份 财务风险
2021 1,500,000
2022 7,500,000
2023 17,500,000
2024 16,500,000
2025 16,500,000
2026 16,500,000
2027 16,000,000
2028 16,000,000
2029 16,000,000
2030 16,000,000
2031 11,000,000
2032 11,000,000
2033 11,000,000
2034 1,000,000
2035 1,000,000
2036 1,000,000
2037 1,000,000
2038 1,000,000
2039 1,000,000
2040 1,000,000
2041 1,000,000
2042 1,000,000

非常感谢!

你需要一个理货table。或者使用递归 cte 在您的查询中动态生成一个。 CROSS JOIN 您的项目 table 符合条件 table


with years as   -- the tally table
(
     select year = min(year(period_start)), max_year = max(year(period_end))
     from   project
     union all
     select year = year + 1, max_year
     from  years
     where  year < max_year
)
select y.year, sum(exposure) As [Financial Exposure]
from   project p
       cross join years y
where  year(p.period_start) <= y.year
and    year(p.period_end) >= y.year
group by y.year

dbfiddle demo