【问题标题】:How To update cell values with previous cell values + another cell value如何用以前的单元格值+另一个单元格值更新单元格值
【发布时间】:2016-12-19 22:20:38
【问题描述】:

我的项目在服务器端使用 SQL 脚本有问题。 我正在尝试设置付款。

问题是,当客户当天没有付款时,PayedAmount 中会有“0”,Status = 2,但差值必须是上一个值加上PaymentAmount 值。我可以用 1 行、1 个信用来做到这一点,但我不知道如何与几个客户一起做到这一点。如何更新所有这些值?

对不起我的英语,如果可以的话,请帮助我

【问题讨论】:

  • 样本数据(不是截图)和想要的结果更有帮助
  • clientId 像一个唯一的帐号吗?
  • 我是新人,抱歉。我回家后会发布数据。我会尝试解释我要什么...这是PaymentHistory 表,它与“信用”表有关,每个CreditId 都是唯一的,ID 每一行都是唯一的,当客户支付信用时Difference = Difference + (PaymentAmount - PayedAmount)我得到了ID的差异,我稍后会发布我的代码,但是当客户不付款时,可能会有几个客户,我不知道如何一次更新所有他们,我可以在c#代码中获取所有id和在 for 循环中运行它,但我相信我可以用 procrdure 来做到这一点

标签: c# sql-server tsql sql-update


【解决方案1】:

看看我的解决方案。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多