首页 > 解决方案 > SQL 保修每年的总财务风险

问题描述

我在SQL Server 2019上。

我陷入了一个似乎很简单的问题,但我陷入了困境。

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

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

示例表是:

项目编号 保修期 财务风险 保修期开始 保修期结束
项目一 绘画 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

太感谢了!

标签: sqlsql-serverfinance

解决方案


你需要一个计数表。或者使用递归 cte 在查询中动态生成一个。CROSS JOIN你的项目表到计数表


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 演示


推荐阅读