sql 将年度记录拆分为 12 个月的记录
sql split yearly record into 12 monthly records
我正在尝试使用常见的 table 表达式将年度记录拆分为 12 个月的记录。我必须为未来 20 年的记录做这件事。这意味着 20 行变成 600 行(20*12=600 条记录)。
最好的方法是什么。任何人都可以帮助以有效的方式做到这一点。
使用单个 table 如下所示。 0 年表示当前年份,因此它应该拆分为剩余的月份,而 year=1 表示明年以后应该拆分为 12(个月)记录
id year value
1 0 3155174.87
1 1 30423037.3
1 2 35339631.25
预期结果应如下所示:
Id 年月值日历年
1 0 5 150 2022
1 0 6 150 2022
1 0 7 150 2022
1 0 8 150 2022
1 0 9 150 2022
1 0 10 150 2022
1 0 11 150 2022
1 0 12 150 2022
1 0 1 150 2023
1 0 2 150 2023
1 0 3 150 2023
1 0 4 150 2023
1 1 5 100 2023
1 1 6 100 2023
1 1 7 100 2023
1 1 8 100 2023
1 1 9 100 2023
1 1 10 100 2023
1 1 11 100 2023
1 1 12 100 2023
1 1 1 100 2024
1 1 2 100 2024
1 1 3 100 2024
1 1 4 100 2024
您可以简单地加入一个月份列表,然后使用一些算术来拆分 Value
SELECT
t.Id,
t.Year,
v.Month,
Value = t.Value / CASE WHEN t.Year = 0 THEN 13 - MONTH(GETDATE()) ELSE 12 END
FROM YourTable t
JOIN (VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
) v(Month) ON t.year > 0 OR v.Month >= MONTH(GETDATE());
我正在尝试使用常见的 table 表达式将年度记录拆分为 12 个月的记录。我必须为未来 20 年的记录做这件事。这意味着 20 行变成 600 行(20*12=600 条记录)。 最好的方法是什么。任何人都可以帮助以有效的方式做到这一点。 使用单个 table 如下所示。 0 年表示当前年份,因此它应该拆分为剩余的月份,而 year=1 表示明年以后应该拆分为 12(个月)记录
id year value
1 0 3155174.87
1 1 30423037.3
1 2 35339631.25
预期结果应如下所示:
Id 年月值日历年 1 0 5 150 2022 1 0 6 150 2022 1 0 7 150 2022 1 0 8 150 2022 1 0 9 150 2022 1 0 10 150 2022 1 0 11 150 2022 1 0 12 150 2022 1 0 1 150 2023 1 0 2 150 2023 1 0 3 150 2023 1 0 4 150 2023 1 1 5 100 2023 1 1 6 100 2023 1 1 7 100 2023 1 1 8 100 2023 1 1 9 100 2023 1 1 10 100 2023 1 1 11 100 2023 1 1 12 100 2023 1 1 1 100 2024 1 1 2 100 2024 1 1 3 100 2024 1 1 4 100 2024
您可以简单地加入一个月份列表,然后使用一些算术来拆分 Value
SELECT
t.Id,
t.Year,
v.Month,
Value = t.Value / CASE WHEN t.Year = 0 THEN 13 - MONTH(GETDATE()) ELSE 12 END
FROM YourTable t
JOIN (VALUES
(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11),(12)
) v(Month) ON t.year > 0 OR v.Month >= MONTH(GETDATE());