运行 来自 table 的总值直到它匹配来自另一个 table 的值

Running total of values from a table until it matches value from another table

我有 2 个 tables。

Table 1 是临时变量 table:

declare @Temp as table ( proj_num varchar(10), sum_dom decimal(23,8))

我的临时 table 中填充了项目编号列表和月末会计美元金额。
例如:

proj_num |  sum_dom
11522    |  2477.15
11524    | 26474.20
41865    |  9012.10

Table 2 是项目交易 table。 我们只关注以下列:

个别值会是这样的:

proj_num | cost_code | amount  | tran_date
11522    | LBR       |  112.10 | 10/1/2018
11522    | LBR       | 1765.90 | 10/2/2018
11522    | MAT       |  599.15 | 10/3/2018
11522    | FRT       |   57.50 | 10/4/2018

所以对于这个项目,由于 2477.15 美元的总金额在 10 月 3 日达到,示例输出将是:

proj_num | cost_code | amount 
11522    |  LBR      | 1878.00
11522    |  MAT      | 599.15

我想对项目交易 table 下的金额(按 cost_code 分组,并按 tran_date 排序)求和,直到该项目值的总值与temp table 的 sum_dom 列中的值,此时我将输出该数据。

你能帮我弄清楚如何编写查询来做到这一点吗? 我知道我应该避免游标,但到目前为止,我的尝试运气不佳。我似乎无法让它保持 运行 总数。

运行 使用 SUM(...) OVER (ORDER BY ...) 求和。你只需要告诉在哪里停止:

SELECT sq.*
FROM projects
INNER JOIN (
    SELECT
        proj_num,
        cost_code,
        amount,
        SUM(amount) OVER (PARTITION BY proj_num ORDER BY tran_date) AS running_sum
    FROM project_transactions
) AS sq ON projects.proj_num = sq.proj_num
WHERE running_sum <= projects.sum_dom

DB Fiddle