DECLARE @EndYear INT =2020 --Also you can get from data by MAX(Year)
;WITH tb(PROJECT_ID,RELEASE_NO,[YEAR],VALUE_TYPE,VAL_DES,COST,RUN_TATE,FREQUENCY)
AS(
SELECT 111,1,2016,'IT','EXPENSE',0,NULL,NULL UNION
SELECT 111,1,2016,'IR','INCOME',10000,NULL,NULL UNION
SELECT 111,1,2016,'OC','EXPENSE',-200000,NULL,NULL UNION
SELECT 111,1,2016,'Vendor','EXPENSE',-5000,NULL,NULL UNION
SELECT 111,1,2017,'BC','INCOME',200000,NULL,NULL UNION
SELECT 111,1,2017,'ITA','INCOME',5000,5000,'Recurring' UNION
SELECT 111,1,2017,'OC','EXPENSE',-200000,NULL,NULL UNION
SELECT 111,1,2018,'OC','EXPENSE',-10000,-10000,'Recurring' UNION
SELECT 111,1,2018,'PA','INCOME',100000,100000,'Recurring' UNION
SELECT 111,1,2019,'icc','INCOME',500,NULL,NULL UNION
SELECT 111,1,2020,NULL,NULL,NULL,NULL,NULL
),Recurring AS (
SELECT tb.PROJECT_ID,tb.RELEASE_NO,tb.VALUE_TYPE,tb.VAL_DES,MIN([YEAR]) AS StartYear,MAX(COST) AS COST,MAX(tb.RUN_TATE) AS RUN_TATE
FROM tb WHERE FREQUENCY='Recurring'
GROUP BY tb.PROJECT_ID,tb.RELEASE_NO,tb.VALUE_TYPE,tb.VAL_DES
)
SELECT * FROM tb union
SELECT r.PROJECT_ID,r.RELEASE_NO,n.number AS [YEAR],r.VALUE_TYPE,r.VAL_DES,r.COST,r.RUN_TATE,NULL AS FREQUENCY FROM
Recurring AS r
OUTER APPLY (
SELECT sv.number FROM master.dbo.spt_values AS sv WHERE sv.type='P' AND sv.number BETWEEN r.StartYear+1 AND @EndYear
)n
PROJECT_ID RELEASE_NO YEAR VALUE_TYPE VAL_DES COST RUN_TATE FREQUENCY
----------- ------------ ----------- ---------- ------- ------------ ------------ ---------
111 1 2016 IR 收入 10000 NULL NULL
111 1 2016 IT 费用 0 NULL NULL
111 1 2016 OC 费用 -200000 NULL NULL
111 1 2016 供应商费用 -5000 NULL NULL
111 1 2017 BC 收入 200000 NULL NULL
111 1 2017 ITA 收入 5000 5000 经常性
111 1 2017 OC 费用 -200000 NULL NULL
111 1 2018 ITA 收入 5000 5000 空
111 1 2018 OC 费用 -10000 -10000 经常性
111 1 2018 PA 收入 100000 100000 经常性
111 1 2019 icc 收入 500 NULL NULL
111 1 2019 ITA 收入 5000 5000 空
111 1 2019 OC 费用 -10000 -10000 NULL
111 1 2019 PA 收入 100000 100000 NULL
111 1 2020 无 无 无 无 无 无
111 1 2020 ITA 收入 5000 5000 空
111 1 2020 OC 费用 -10000 -10000 NULL
111 1 2020 PA 收入 100000 100000 NULL