2016-11-30 10 views
0

私はプロジェクト番号とリリース番号のレコードを持っており、値が繰り返される場合は次の行を繰り返す必要があります。 最初のイメージは、私が持っているデータを示していることenter image description here値が反復される場合、来年は値を返す

私の予想される出力は、次のとおりです。出力の enter image description here

説明:年に2017 VALUE_TYPE ITAはそう定期として周波数を有し、この値は、すべての次に繰り返すべきです(すなわち、2018,2019、および2020)。 2018年にOCとPAが繰り返されているので、2019年と2020年に繰り返す必要があります。

私は定期的な値だけ新しいビューを作成し、そのビューをベーステーブルと結合しようとしました。しかし、それは私に適切な結果を与えていません。

誰もがこれで私を助けてくださいことはできますか?他の列(RUN_RATE)について

事前に感謝..

+0

どのように?彼らは繰り返しますか?あなたはそれを永遠に繰り返すでしょうか? – 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 –

関連する問題