2016-12-19 12 views
-1

SQLスクリプトを使用して、サーバー側でプロジェクトに問題があります。 支払いを設定しようとしています。顧客がPayedAmountで、現在の日のために支払ういないとき 1どのようにセルの値を以前のセルの値+別のセルの値で更新する

問題は、「0」があるだろう、Status = 2ですが、差分値が前の値を加えたPaymentAmount値でなければなりません。私は1行、1クレジットでこれを行うことができますが、私は顧客のカップルでこれを行う方法を知らない。この値をすべて更新するには?

私の英語のために申し訳ありません。

+5

サンプルデータ(スクリーンショットではありません)と望ましい結果がより役立ちます –

+0

clientIdは固有のアカウント番号のようですか? – scsimon

+0

ここに新しいものは、申し訳ありません。私は家に帰るとデータを投稿します。私は何を求めているのかを説明しようとしています...これは 'PaymentHistory'テーブルであり、 'Credit'テーブルとの関係を持ち、' ​​CreditId'は一意であり、すべての行の 'ID'はユニークです。 'Difference = Difference + Difference +(PaymentAmount - PayedAmount)'私はIdによって違いを得ます。後でコードを投稿しますが、顧客が支払っていないときには、カップルの顧客がいる可能性があります。 C#コードですべてのIDを取得してforループで実行できますが、私はprocrdureでこれを行うことができます – Noah

答えて

0

私の解決策を見てください。

CREATE TABLE #Temp 
(
    Id    INT, 
    CreditId  INT, 
    PaymentDay  INT, 
    PaymentAmount MONEY, 
    PayedAmount  MONEY, 
    [Status]  INT, 
    PayedOn   DATETIME, 
    Different  MONEY 
) 

INSERT #Temp 
VALUES 
    (38827, 37219, DATEDIFF(DAY, '', '2016-12-19'), 249.2308, 100.0000, 1, CAST('2016-12-19 14:12:07' AS DATETIME), 149.2308), 
    (38828, 37219, DATEDIFF(DAY, '', '2016-12-22'), 249.2308, 0.0000, 0, NULL, 0), 
    (38829, 37219, DATEDIFF(DAY, '', '2016-12-25'), 249.2308, 0.0000, 0, NULL, 0), 
    (38830, 37219, DATEDIFF(DAY, '', '2016-12-26'), 249.2308, 0.0000, 0, NULL, 0), 

    (38837, 37220, DATEDIFF(DAY, '', '2016-12-19'), 249.2308, 100.0000, 1, CAST('2016-12-19 14:12:07' AS DATETIME), 149.2308), 
    (38838, 37220, DATEDIFF(DAY, '', '2016-12-22'), 200, 90.0000, 0, NULL, 0), 
    (38839, 37220, DATEDIFF(DAY, '', '2016-12-25'), 200, 0.0000, 0, NULL, 0), 
    (38840, 37220, DATEDIFF(DAY, '', '2016-12-26'), 200, 0.0000, 0, NULL, 0) 

;WITH cte1 
AS 
( 
    SELECT ROW_NUMBER() OVER(PARTITION BY t.CreditId ORDER BY t.Id) AS RowNumber, t.* 
    FROM #Temp t 
), 
cte 
AS 
(
    SELECT RowNumber, Id, CreditId, PaymentAmount - PayedAmount AS Different 
    FROM cte1 
    WHERE RowNumber = 1 

    UNION ALL 

    SELECT t.RowNumber, t.Id, t.CreditId, cte.Different + t.PaymentAmount - t.PayedAmount 
    FROM cte 
     JOIN cte1 t ON t.RowNumber = cte.RowNumber + 1 AND t.CreditId = cte.CreditId 
    WHERE t.RowNumber > 1 

) 

UPDATE t 
SET Different = cte.Different 
FROM #Temp t 
    JOIN cte ON cte.Id = t.Id 

SELECT * FROM #Temp 

DROP TABLE #Temp 
関連する問題