2016-11-15 17 views
0

を実行するには不足している日付を追加:は、私はSQL Serverでテーブルを持っている場合は合計

DATE   ITEM  Quantity_Received 
1/1/2016  Hammer 20 
1/3/2016  Hammer 50 
1/5/2016  Hammer 100 
... 

そして私は、出力したい:Quantity_Runningは単なる累積和である

DATE   ITEM  Quantity_Running 
1/1/2016  Hammer  20 
1/2/2016  Hammer  20 
1/3/2016  Hammer  70 
1/4/2016  Hammer  70 
1/5/2016  Hammer  120 

。私は最初のテーブルに存在しない出力テーブルに欠けている日付をどのように追加するのか混乱しています。注意すべきは、私はこれを多くのアイテムで行う必要があり、おそらく私が望む日付のテンポラリテーブルを持つことになるでしょう。

ありがとうございました!

EDIT

そして、それを行うには、そのようなあなたが参加し、内側を使用することをする方法はありますか?

SELECT TD.Date, 
    FT1.Item, 
    SUM(FT2.QTY) AS Cumulative 
FROM tempDates TD 
LEFT JOIN FutureOrders FT1 
ON TD.SETTLE_DATE = FT1.SETTLE_DATE 
INNER JOIN FutureOrders FT2 
ON FT1.Settle_Date < ft2.Settle_Date AND ft1.ITEM= ft2.ITEM 
GROUP BY ft1.ITEM, ft1.Settle_Date 

tempDatesは、希望する日付のCTEです。私はNULL値を返すので。そして、申し訳ありませんが、私は実際にしたい、それが少し複雑にするには:

DATE   ITEM  Quantity_Running 
1/1/2016  Hammer   150 
1/2/2016  Hammer   100 
1/3/2016  Hammer   100 
1/4/2016  Hammer   0 
1/5/2016  Hammer   0 

は私の単純な質問に基づいて自分で答えを得ることができるだろうと思いました。

答えて

3

再帰的cteを使用して(指定した日付の範囲内の)すべての日付を生成します。その後、生成された日付cteを結合し、欠落した日付の実行合計を取得します。

with dates_cte as 
(select cast('2016-01-01' as date) dt 
union all 
select dateadd(dd,1,dt) from dates_cte where dt < '2016-01-31' --change this date to the maximum date needed 
) 
select dt,item,sum(quantity) over(partition by item order by dt) quantity_running 
from (select d.dt,i.item, 
     coalesce(t.quantity_received,0) quantity 
     from dates_cte d 
     cross join (select distinct item from t) i 
     left join t on t.dt=d.dt and i.item=t.item) x 
order by 2,1 

編集:

with dates_cte as 
(select cast('2016-01-01' as date) dt 
union all 
select dateadd(dd,1,dt) from dates_cte where dt < '2016-01-31' --change this date to the maximum date needed 
) 
select dt,item, 
sum(quantity) over(partition by item order by dt desc rows between unbounded preceding and 1 preceding) quantity_running 
from (select d.dt,i.item, 
     coalesce(t.quantity_received,0) quantity 
     from dates_cte d 
     cross join (select distinct item from t) i 
     left join t on t.dt=d.dt and i.item=t.item) x 
order by 2,1 
+0

を使用し、現在の行を除く逆累積和を得るためにあなたの応答を、私は持っていたものに似て何かすることをお願いします。残念ながらもう少し複雑にしなければなりませんでした。あなたが与えるどんな助けも高く評価されます。ありがとう – user3697498

+0

@ user3697498 ..私はあなたの心配を参照してください。期待される結果が得られるはずの編集されたバージョンを参照してください。 –

+0

..これは逆の累積合計を考慮に入れていますか?あなたが私のコードビットに気付いたら、私はFT1.Settle_Date user3697498

関連する問題