2016-11-30 53 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 –