如何编写查询以循环分配和计算资金
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)
我正在尝试编写一个查询(稍后将转换为一个过程以将结果存储在 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)