问题
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