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
我在 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