2016-11-30 52 views
0

我有项目和版本号的记录,如果价值重复发生,我需要在明年重复该行。 第一幅图像显示,我有数据它enter image description here如果价值重复,为下一年获取价值

我的预期输出是: enter image description here

输出的说明:在2017年VALUE_TYPE ITA具有频率为经常性的话,这个值应该在所有接下来的重复年(即2018年,2019年和2020年)。像2018年那样,OC和PA是反复出现的,所以它也需要在2019年和2020年重复。

为此,我创建了一个仅用于重复值的新视图,并尝试使用基表连接该视图。但它没有给我适当的结果。

任何人都可以帮助我吗?

在此先感谢..

+0

如何等栏目(RUN_RATE)?他们重复吗?你会永远重复它吗? – DVT

+0

它停在哪里?也许最好有一个'Repeat_Until'字段,重复完成一年。 – mendosi

+0

只有定期价值行将重复... @ DVT –

回答

0
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   INCOME 10000  NULL  NULL 
111   1   2016  IT   EXPENSE 0   NULL  NULL 
111   1   2016  OC   EXPENSE -200000  NULL  NULL 
111   1   2016  Vendor  EXPENSE -5000  NULL  NULL 
111   1   2017  BC   INCOME 200000  NULL  NULL 
111   1   2017  ITA  INCOME 5000  5000  Recurring 
111   1   2017  OC   EXPENSE -200000  NULL  NULL 
111   1   2018  ITA  INCOME 5000  5000  NULL 
111   1   2018  OC   EXPENSE -10000  -10000  Recurring 
111   1   2018  PA   INCOME 100000  100000  Recurring 
111   1   2019  icc  INCOME 500   NULL  NULL 
111   1   2019  ITA  INCOME 5000  5000  NULL 
111   1   2019  OC   EXPENSE -10000  -10000  NULL 
111   1   2019  PA   INCOME 100000  100000  NULL 
111   1   2020  NULL  NULL NULL  NULL  NULL 
111   1   2020  ITA  INCOME 5000  5000  NULL 
111   1   2020  OC   EXPENSE -10000  -10000  NULL 
111   1   2020  PA   INCOME 100000  100000  NULL 
+0

非常感谢@Nolan Shang –