T-SQL - sum 関数と over 句を使って累計を求める
sum 関数と over 句を使って累計を求めてみたいと思います。
とりあえずデータ。どこかにある焼き鳥屋さんの売り上げのようなテーブルだと思ってもらえると。
select * into #Sale from (values ('2013/12/09', N'ねぎま', 100), ('2013/12/10', N'ねぎま', 200), ('2013/12/11', N'純けい', 100), ('2013/12/12', N'純けい', 300), ('2013/12/14', N'ねぎま', 400), ('2013/12/14', N'純けい', 200), ('2013/12/15', N'ねぎま', 100)) as Src(Date, Name, Value);
では品名別で累計を求めてみましょう。
select Name, Date, Value, sum(Value) over(partition by Name order by Date) as Accumulated from #Sale order by Name, Date; /* Name Date Value Accumulated ------- ---------- ----------- ----------- ねぎま 2013/12/09 100 100 ねぎま 2013/12/10 200 300 ねぎま 2013/12/14 400 700 ねぎま 2013/12/15 100 800 純けい 2013/12/11 100 100 純けい 2013/12/12 300 400 純けい 2013/12/14 200 600 */
over 句の中の partition by 句によってグルーピングされ、order by 句によって順序が決まって累計されるようです。
また、partition by を指定しないことによって、全体の累計を求めることもできます。
select Date, Name, Value, sum(Value) over(order by Date) as Accumulated from #Sale order by Date; /* Date Name Value Accumulated ---------- ------- ----------- ----------- 2013/12/09 ねぎま 100 100 2013/12/10 ねぎま 200 300 2013/12/11 純けい 100 400 2013/12/12 純けい 300 700 2013/12/14 ねぎま 400 1300 2013/12/14 純けい 200 1300 2013/12/15 ねぎま 100 1400 */
純けい食べたいですね。