DB2 SQL中的查找和求和合约

时间:2016-12-21 14:50:27

标签: sql db2

我正在尝试计算下表中合同修订的价值。

Contract_table

如果对合同进行修改,则使用合同的最后版本的剩余部分+修订中添加的值更新该值。 为了说明我添加了关于它在最后一栏中如何计算的信息。

我将如何在SQL for DB2中实现这一点,我在这里遇到了障碍。 感谢

1 个答案:

答案 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