我有一个名为tblInvManager的表,其中包含以下列
表名:tblInvManager
InvNo | Customer Name | InvAmount | AllInvTotal 1 | Cust A | 50,000 | 50,000 2 | Cust A | 15,000 | 65,000 3 | Cust A | 25,000 | 90,000 4 | Cust A | 40,000 | 130,000 5 | Cust B | 10,000 | 10,000 6 | Cust B | 35,000 | 45,000 7 | Cust B | 80,000 | 125,000 8 | Cust C | 12,000 | 12,000 9 | Cust C | 18,000 | 30,000
例如,如果上表中的Invoice Number:1的值从50,000更新为25,000,我想根据更改更新AllInvTotal列 所以在更新发票金额后我的新表将如下:
预期结果
InvNo | Customer Name | InvAmount | AllInvTotal 1 | Cust A | 25,000 | 25,000 2 | Cust A | 15,000 | 40,000 3 | Cust A | 25,000 | 65,000 4 | Cust A | 40,000 | 105,000 5 | Cust B | 10,000 | 10,000 6 | Cust B | 35,000 | 45,000 7 | Cust B | 80,000 | 125,000 8 | Cust C | 12,000 | 12,000 9 | Cust C | 18,000 | 30,000
我已经进行了以下查询,但我无法这样做。 Someome请帮助我:
DECLARE @Inv_No VARCHAR(MAX)
DECLARE @LCRef VARCHAR(MAX)
DECLARE @InvTotal DECIMAL(18,6)
DECLARE @AllInvTotal DECIMAL(18,6)
SET @AllInvTotal = 0
DECLARE InvManagerCursor CURSOR
FOR SELECT InvNo_InvMan, LCRef_InvMan, InvAmt_InvMan FROM tblInvManager
FOR UPDATE OF AllInv_InvMan
OPEN InvManagerCursor
FETCH NEXT FROM InvManagerCursor INTO @InvNo, @LCRef, @InvTotal
WHILE @@FETCH_STATUS = 0
BEGIN
SET @AllInvTotal += @InvTotal
Update tblInvManager
SET AllInv_InvMan = @AllInvTotal
WHERE CURRENT OF InvManagerCursor
FETCH NEXT FROM InvManagerCursor INTO @InvNo, @LCRef, @InvTotal
END
CLOSE InvManagerCursor
DEALLOCATE InvManagerCursor
请告知
答案 0 :(得分:0)
可以使用其他查询 在这里,我将把表格称为" table"因为你没有给我们这个名字。 每次更新后都会:
UPDATE table SET inv_amt = 6000 WHERE Inv_no = 2
您必须使用以下查询:
UPDATE table SET totalcustinv =
(
SELECT sum(inv_amt)
FROM table as secondTable
WHERE table .Inv_no >= secondTable.Inv_no
)
此查询应将每行的totalcustinv设置为所有行的inv_amt之和,其中Inv_no小于或等于当前行。
当然,要使其工作,Inv_no必须在数字上具有可比性。因为你在每个Inv_no之后写了一个点,我担心它是一个文本,并且不容易在数字上进行比较。由于这篇文章应该回答你的问题,我不会说如何将TEXT转换成INT。
另一件事:我不确定它是否适用于您的SQL数据库。我在PostgreSQL上测试过,它运行得很好!