如何编写查询以循环分配和计算资金

How to write query to allocate and calculate funds in a loop

我正在尝试编写一个查询(稍后将转换为一个过程以将结果存储在 table 中)以根据需要分配资金。查询需要从上一条记录计算值,然后将其用于下一行的计算。

我有两个主要 tables,一个有每个位置的主资金。第二个 table 有关于需要多少以及从什么地点订购的详细信息。 我需要根据需要的金额扣除资金,除非资金达到0,然后继续下一个订单。

[![高手Table][1]][1]

[![订单数 Table][2]][2]

[预期结果][3]

我不知道你打算如何对行进行排序,所以让我们做一些假设:

1) 您加入 Office

2) 您按顺序 ID 以升序方式处理(在这种情况下,您采样的最终结果行顺序不正确)

3) Amt 剩下你没说过所以我现在就把它设置为 0。

在这种情况下,以下查询将起作用:

;WITH CTE AS (
    select  o.ID, m.Country, m.Office, m.Funds, o.Amount, 
            row_number() over (PARTITION BY m.Office order by id) as rowid
    from Master m
    left outer join Orders o
        on (m.Office = o.Office)
)
select c.ID, c.Amount, c.Country, c.Office, p.[Funds],  
        p.[Funds] - sum(c.Amount) over (PARTITION BY c.Office ORDER BY c.id ROWS UNBOUNDED PRECEDING) as [Funds Remaining],
        0 as [Amt Remaining]
from CTE c
left outer join CTE p
    on (c.office = p.office AND p.rowid=1)

示例:https://rextester.com/DGZEU1974