2016-12-19 3 views
-1

SQL 스크립트를 사용하여 서버 측 프로젝트에 문제가 있습니다. 지급금을 설정하려고합니다. 고객이 PayedAmount에서, 현재의 일을 지불하지 않는 경우 1어떻게 이전 셀 값 + 다른 셀 값으로 셀 값을 업데이트하려면

문제는, "0"이 될 것입니다, Status = 2이지만, 차이 값이 이전 값을 더한 PaymentAmount 값이어야합니다. 1 행 1 크레딧으로이 작업을 수행 할 수 있지만 몇 고객과 함께하는 방법을 모르겠습니다. 이 모든 값을 업데이트하는 방법?

내 영어로 죄송합니다.

+5

샘플 데이터 (하지 스크린 샷) 원하는 결과 –

+0

는 고유 계정 번호와 같은 clientid에 더 도움이된다? – scsimon

+0

여기에 새로운 하나, 죄송합니다. 집에 갈 때 데이터를 게시합니다. 나는 무엇을 묻는 지 설명하려고 노력할 것입니다. 이것은 PaymentHistory 테이블입니다.이 테이블은 'Credits'테이블과 관련이 있습니다. 모든 Credit Id는 고유하고, 각 행에 대한 ID는 고유합니다. '차이 = 차이 + (PaymentAmount - PayedAmount)'Id에 따라 차이가 생기고, 나중에 코드를 게시 하겠지만, 고객이 지불하지 않으면 몇 명의 고객이있을 수 있습니다. 한 번에 모든 것을 업데이트하는 방법을 모릅니다. 모든 ID를 C# 코드에서 가져 와서 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 
관련 문제