故事:
我的数据集如下所示:
+---------+------+-----------------+---------+
| Date | Cost | Revenue Month | Revenue |
+---------+------+-----------------+---------+
| 2018-01 | 20 | 2018-02 | 20 |
| 2018-01 | 20 | 2018-03 | 100 |
| 2018-02 | 5 | 2018-03 | 15 |
| 2018-02 | 5 | 2018-04 | 25 |
+---------+------+-----------------+---------+
基本上,“日期”列表示初始投资,“收入月”表示因投资月而产生的资金。我希望在本月之前的每个后续月份都填写收入月份的行,并强制收入显示为0(即2020年8月)
目标:
+---------+------+-----------------+---------+---------+
| Date | Cost | Returning Month | Revenue | Product |
+---------+------+-----------------+---------+---------+
| 2018-01 | 20 | 2018-02 | 20 | A |
| 2018-01 | 20 | 2018-03 | 100 | A |
| 2018-01 | 20 | 2018-04 | 0 | A |
| 2018-01 | 20 | 2018-05 | 0 | A |
| 2018-02 | 5 | 2018-03 | 15 | A |
| 2018-02 | 5 | 2018-04 | 25 | A |
| 2018-02 | 5 | 2018-03 | 0 | A |
| 2018-02 | 5 | 2018-03 | 0 | A |
我尝试的是:
我做了这个理货日期表
DROP TABLE IF EXISTS ##dates
CREATE TABLE ##dates ([date] Date)
DECLARE @dIncr DATE = '01/01/2018'
DECLARE @dEnd DATE = cast(getdate() as date)
WHILE (@dIncr <= @dEnd)
BEGIN
INSERT INTO ##dates ([date]) VALUES (@dIncr)
SELECT @dIncr = DATEADD(month,1,@dIncr)
END
但我被这个困住了。
1条答案
按热度按时间6psbrbz91#
如果你想增加两个月的数据,你可以使用
union all
:编辑:
使用递归cte: