2016-12-21 3 views
1

私は下の表の契約修正の価値を計算しようとしています。DB2 SQLのルックアップとサムコントラクト

Contract_table

値が契約+改正に付加価値の最後のバージョンからの残りで更新され、契約の修正があります。 私は最後の列で計算された方法に関する情報を追加するために説明します。

私はそれをDB2 for SQLでどうやってやっていきたいのですか?私はここに壁を打っています。 おかげ

+1

:そこの列からAmendmentValue計算のために配置されます。 –

+0

問題のDB2バージョンとプラットフォームも投稿してください。 – mustaccio

+0

申し訳ありませんが、それはDB2 9.7です、我々はdatastageを使用してジョブを実行します – user7326074

答えて

0

は自己ROW_NUMBER()契約することにより、各計算実行中の番号に参加の使用を検討してください。具体的には、LEFT JOINを最初のFROMテーブルの1つ後の行番号にフィルタリングします。代わりに、未知の細胞へのセル参照を、あなたが計算している実際の値を入れなければならない

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