내 솔루션보세요.
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 테이블입니다.이 테이블은 'Credits'테이블과 관련이 있습니다. 모든 Credit Id는 고유하고, 각 행에 대한 ID는 고유합니다. '차이 = 차이 + (PaymentAmount - PayedAmount)'Id에 따라 차이가 생기고, 나중에 코드를 게시 하겠지만, 고객이 지불하지 않으면 몇 명의 고객이있을 수 있습니다. 한 번에 모든 것을 업데이트하는 방법을 모릅니다. 모든 ID를 C# 코드에서 가져 와서 for 루프에서 실행할 수 있지만 procrdure를 사용하여이 작업을 수행 할 수 있습니다. – Noah