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());

db<>fiddle