SQL Server 2008 R2 running sum

孤者浪人 提交于 2019-12-25 06:50:07

问题


I have a table like below.

row_no and product are PK.

+--------+---------+-------+-----+---------------+---------+
| row_no | Product | value | qoh | prev_week_qty | cum_qty |
+--------+---------+-------+-----+---------------+---------+
| 1      | pr:1    | 101   | 101 | NULL          | NULL    |
| 2      | pr:1    | 201   | 101 | NULL          | 100     |
| 3      | pr:1    | 101   | 101 | NULL          | NULL    |
| 4      | pr:1    | 101   | 101 | NULL          | NULL    |
| 5      | pr:1    | 183   | 101 | NULL          | -18     |
| 6      | pr:1    | 101   | 101 | NULL          | NULL    |
| 7      | pr:1    | 101   | 101 | NULL          | NULL    |
| 8      | pr:1    | 149   | 101 | NULL          | -34     |
| 9      | pr:1    | 131   | 101 | NULL          | -18     |
| 10     | pr:1    | 101   | 101 | NULL          | NULL    |
| 11     | pr:1    | 113   | 101 | NULL          | -18     |
| 12     | pr:1    | 101   | 101 | NULL          | NUll    |
| 13     | pr:1    | 101   | 101 | NULL          | NUll    |
| 14     | pr:1    | 101   | 101 | NULL          | NUll    |
| 17     | pr:1    | 101   | 101 | NULL          | NULL    |
+--------+---------+-------+-----+---------------+---------+

Is there any way to implement this without usig cusrsor?

Logic: Value = qoh + cum_qty + prev_week_qty

For ex:

  • For row_no=1, value = qoh+prev_week_qty+cum_qty.
  • For row_no=2, qoh = (row_no = 1.value), then qoh+ prev_week_qty+cum_qty
  • For row_no=3, qoh = (row_no = 2.value), then qoh+ prev_week_qty+cum_qty

Expected output:

+--------+---------+-------+-----+---------------+---------+
| row_no | Product | value | qoh | prev_week_qty | cum_qty |
+--------+---------+-------+-----+---------------+---------+
| 1      | pr:1    | 101   | 101 | NULL          | NULL    |
| 2      | pr:1    | 201   | 101 | NULL          | 100     |
| 3      | pr:1    | 201   | 101 | NULL          | NULL    |
| 4      | pr:1    | 201   | 101 | NULL          | NULL    |
| 5      | pr:1    | 183   | 101 | NULL          | -18     |
| 6      | pr:1    | 183   | 101 | NULL          | NULL    |
| 7      | pr:1    | 183   | 101 | NULL          | NULL    |
| 8      | pr:1    | 149   | 101 | NULL          | -34     |
| 9      | pr:1    | 131   | 101 | NULL          | -18     |
| 10     | pr:1    | 131   | 101 | NULL          | NULL    |
| 11     | pr:1    | 113   | 101 | NULL          | -18     |
| 12     | pr:1    | 113   | 101 | NULL          | NUll    |
| 13     | pr:1    | 113   | 101 | NULL          | NUll    |
| 14     | pr:1    | 113   | 101 | NULL          | NUll    |
| 17     | pr:1    | 101   | 101 | NULL          | NULL    |
+--------+---------+-------+-----+---------------+---------+

I am using SQL Server 2008 R2.


回答1:


In SQL SERVER 2012+ you can use SUM()OVER(ORDER BY) trick unfortunately you are using older version. Try something like this

SELECT *
FROM   Yourtable A
       CROSS apply (SELECT Sum(Isnull([cum_qty], 0)
                               + Isnull(prev_week_qty, 0) + CASE WHEN row_no = 1 THEN qoh ELSE 0 END) su
                    FROM   Yourtable B
                    WHERE  a.[row_no] >= b.[row_no]) cs 


来源:https://stackoverflow.com/questions/38216962/sql-server-2008-r2-running-sum

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!