我正在尝试计算下表中合同修订的价值。
如果对合同进行修改,则使用合同的最后版本的剩余部分+修订中添加的值更新该值。 为了说明我添加了关于它在最后一栏中如何计算的信息。
我将如何在SQL for DB2中实现这一点,我在这里遇到了障碍。 感谢
答案 0 :(得分:0)
考虑使用合同与ROW_NUMBER()
计算运行编号的自联接。具体来说,将LEFT JOIN
过滤到第一个FROM
表后面的一个行号。从那里,列将对齐 AmendmentValue 计算:
SELECT sub1.Contract, sub1.Amendment, sub1.Value, sub1.Billed, sub1.Reminder,
(CASE WHEN sub1.Amendment IS NULL THEN NULL
ELSE sub1.Billed - sub2.Remainder END) As AmendmentValue
FROM
(SELECT t.Contract, t.Amendment, t.Value, t.Billed, t.Remainder,
ROW_NUMBER() OVER (PARTITION BY t.Contract
ORDER BY CASE WHEN t.Amendment IS NULL THEN 1 ELSE t.Amendment END) rn
FROM TableName t) sub1
LEFT JOIN
(SELECT t.Contract, t.Amendment, t.Value, t.Billed, t.Remainder,
ROW_NUMBER() OVER (PARTITION BY t.Contract
ORDER BY CASE WHEN t.Amendment IS NULL THEN 1 ELSE t.Amendment END) rn
FROM TableName t) sub2
ON sub1.Contract = sub2.Contract AND sub1.rn = sub2.rn + 1