2017-08-31 13 views
1

SQLクエリに関して質問があります。私は、列Y.列Yの値に基づいて、列Xの値の最後の5行の累積実行中の合計を計算する必要が はい含まれている可能性があり、ノーまたは多分最後の5行の累積合計

データの例は次のようになります。

Date Column X Column Y Yes cum total No cum total Maybe Total 

    31/8 1000  Y   1200   800   250 
    30/8 500  N   250   800   250 
    29/8 200  Y   250   375   250 
    28/8 300  N   50   375   250 
    27/8 250  M   50   75   250 
    26/8 50  Y   50   75   0 
    25/8 75  N   0    75   0 

私は大文字小文字と区切りを試してみましたが、whereの部分を指定すると累積値は得られませんが、where条件が真である値の合計だけが返されます。

ご協力いただければ幸いです。

Data table and required results

+0

を私はより良いデータのレイアウトを表示する画像を追加しました。私はSQL Server 2016を使用しています。ありがとう! – user5271482

+0

@StanislovasKalašnikovasテーブルの各行について、列Yの値に基づいて列Xの現在の行と前の4行の合計を表示する必要があります。列YにはY = "はい"、N = "いいえ"、M = "たぶん"。私が "Yes cum total"の1200合計に31/8の1000プラス29/8の200を加えた例では、 "No cum total"の31/8に表示された800の合計は30/8 500プラス28/8 300に基づいています。これが明確になることを願っています。 – user5271482

答えて

2

あなたはcaseと、ウィンドウ句で累積和を使用することができます。

select t.*, 
     sum(case when y = 'Y' then x else 0 end) over 
      (order by date rows between 4 preceding and current row) as y, 
     sum(case when y = 'N' then x else 0 end) over 
      (order by date rows between 4 preceding and current row) as n, 
     sum(case when y = 'M' then x else 0 end) over 
      (order by date rows between 4 preceding and current row) as m 
from t;