私の解決策を見てください。
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
サンプルデータ(スクリーンショットではありません)と望ましい結果がより役立ちます –
clientIdは固有のアカウント番号のようですか? – scsimon
ここに新しいものは、申し訳ありません。私は家に帰るとデータを投稿します。私は何を求めているのかを説明しようとしています...これは 'PaymentHistory'テーブルであり、 'Credit'テーブルとの関係を持ち、' CreditId'は一意であり、すべての行の 'ID'はユニークです。 'Difference = Difference + Difference +(PaymentAmount - PayedAmount)'私はIdによって違いを得ます。後でコードを投稿しますが、顧客が支払っていないときには、カップルの顧客がいる可能性があります。 C#コードですべてのIDを取得してforループで実行できますが、私はprocrdureでこれを行うことができます – Noah