sql - 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 |
太感谢了!
解决方案
你需要一个计数表。或者使用递归 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
推荐阅读
- javascript - Onclick 事件打开一个新页面并通过使用 javascript 执行 api 调用来加载表
- javascript - 在 Object 的情况下,Javascript 重新分配和引用如何工作?需要深入解释吗?
- html - How can I get my AdRotator ads to stay within the div?
- python - 按数字顺序对文件进行排序,同时排除具有非数字文件名的文件
- swift - 我不小心隐藏了更改并将我的 Xcode 项目恢复到旧版本。如何将其还原为我隐藏的更改?
- javascript - 为什么我无法更新我的反应组件的状态?
- d3.js - 我怎样才能给这个径向集群直线而不是曲线?
- python - JupyterNotebook:属性错误:'NoneType' 对象没有属性'lower'
- c# - 使用 Perfview 查找调用次数最多的方法
- docker - 为多服务项目(单域)设置 SSL 证书