如何使用SQL Server中的视图检查可用库存并将其分配给订单

Ton*_*ony 5 sql sql-server

我有两张桌子:股票和订单:

股票:

*id |  name  |   stockcount
----------------------------
1  | item1  |  10
2  | item2  |  9
Run Code Online (Sandbox Code Playgroud)

Orderrow:

id   |     date   |  itemid  | ordercount
------------------------------------------
1001 |  1/1/2016  |     1    |   5
1002 |  1/1/2016  |     2    |   8
1003 |  1/1/2016  |     2    |   1 
1004 |  1/1/2016  |     1    |   3 
1005 |  1/1/2016  |     1    |   5
Run Code Online (Sandbox Code Playgroud)

我想有以下观点:

qry_orderrow:

id   |     date   | itemid |  ordercount |  stockleft
------------------------------------------------------
1001 |  1/1/2016  |   1    |    5        |   5
1002 |  1/1/2016  |   2    |    8        |   1
1003 |  1/1/2016  |   2    |    1        |   0
1004 |  1/1/2016  |   1    |    3        |   2
1005 |  1/1/2016  |   1    |    5        |   -3
Run Code Online (Sandbox Code Playgroud)

如你所见,我添加了一个列'stockleft'.我想在减去订单的项目数后计算剩下的库存.

有谁知道如何使用SQL Server创建此查询?我真的不知道该怎么做,所以任何帮助都将不胜感激!

Gor*_*off 6

您需要累计订购金额,然后从初始金额中减去该金额.这是一个join花哨的窗口功能:

select o.*,
       (s.stockcount -
        sum(o.ordercount) over (partition by itemid order by date)
       ) as stockleft
from orderrow o join
     stock s
     on o.itemid = s.itemid;
Run Code Online (Sandbox Code Playgroud)

SQL Server 2012+支持累积总和.在早期版本中,您可以apply使用相关子查询或相关子查询执行类似操作.