/ / SQL Server:別の列の値を使用して行全体の値を減算する方法は? - SQLサーバー

SQL Serverの:別の列の値を使用して行全体の値を減算する方法? - SQLサーバー

私はテーブルを持っている stock そして sales 以下のように :

在庫表:

+--------+----------+---------+
| Stk_ID | Stk_Name | Stk_Qty |
+--------+----------+---------+
| 1001   | A        | 20      |
| 1002   | B        | 50      |
+--------+----------+---------+

販売表:

+----------+------------+------------+-----------+
| Sales_ID | Sales_Date | Sales_Item | Sales_Qty |
+----------+------------+------------+-----------+
| 2001     | 2016-07-15 | A          | 5         |
| 2002     | 2016-07-20 | B          | 7         |
| 2003     | 2016-07-23 | A          | 4         |
| 2004     | 2016-07-29 | A          | 2         |
| 2005     | 2016-08-03 | B          | 15        |
| 2006     | 2016-08-07 | B          | 10        |
| 2007     | 2016-08-10 | A          | 5         |
+----------+------------+------------+-----------+

上記の表で、利用可能な在庫を見つけるにはどうすればよいですか? Ava_Stk すべての販売後の各在庫について?
Ava_Stk 差し引くことが期待されます Sales_Qty から Stk_Qty すべての販売の後。

+----------+------------+------------+-----------+---------+
| Sales_ID | Sales_Date | Sales_Item | Sales_Qty | Ava_Stk |
+----------+------------+------------+-----------+---------+
| 2001     | 2016-07-15 | A          | 5         | 15      |
| 2002     | 2016-07-20 | B          | 7         | 43      |
| 2003     | 2016-07-23 | A          | 4         | 11      |
| 2004     | 2016-07-29 | A          | 2         | 9       |
| 2005     | 2016-08-03 | B          | 15        | 28      |
| 2006     | 2016-08-07 | B          | 10        | 18      |
| 2007     | 2016-08-10 | A          | 5         | 4       |
+----------+------------+------------+-----------+---------+

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

回答:

回答№1は1

累積合計が必要で、それを在庫テーブルから減算します。 SQL Server 2012以降の場合:

select s.*,
(st.stk_qty -
sum(s.sales_qty) over (partition by s.sales_item order by sales_date)
) as ava_stk
from sales s join
stock st
on s.sales_item = st.stk_name;