【发布时间】:2021-07-11 19:56:42
【问题描述】:
这个问题是我之前的帖子的补充:Insert dummy rows to fill missing values into a SQL Table
我有这个 SQL Server 表;我想用上个月末的虚拟数据填充 n 行缺失的行,此时为 2021 年 6 月 30 日。我希望其他列 acct, type, amt 与 begin_date 和 end_date 相同,在 2021 年 6 月 30 日之前增加 1 个月。
例如:acct 2 type B 在 2021 年 2 月 28 日结束,因此我需要从该日期创建虚拟行,直到上个月月底,截至目前为 2021 年 6 月 30 日。
acct 2 type A 已经有截至上个月结束 2021-06-30 的行,因此不需要虚拟行。
acct,type,amt, begin_date, end_date
1, C, 10, 2020-05-01, 2020-05-31
1, C, 10, 2020-06-01, 2020-06-30
2, B, 50 ,2021-01-01, 2021-01-31
2, B, 50 ,2021-02-01, 2021-02-28
2, A, 50 ,2021-05-01, 2021-05-31
2, A, 50 ,2021-06-01, 2021-06-30
这就是我想要的结果:
acct,type,amt, begin_date, end_date
1, C, 10, 2020-05-01, 2020-05-31
1, C, 10, 2020-06-01, 2020-06-30
....................................
1, C, 10, 2021-06-01, 2021-06-30
2, B, 50 ,2021-01-01, 2021-01-31
2, B, 50 ,2021-02-01, 2021-02-28
2, B, 50 ,2021-03-01, 2021-03-31
2, B, 50 ,2021-04-01, 2021-04-30
2, B, 50 ,2021-05-01, 2021-05-31
2, B, 50 ,2021-06-01, 2021-06-30
然后我可以对原始表执行 insert 或 union all
【问题讨论】:
-
这就是为什么你要有一个数字表
标签: sql-server stored-procedures sql-order-by common-table-expression recursive-query