我有一个名为tblInvManager的表,其中包含以下列
表名:tblInvManager
InvNo |客户名称| InvAmount | AllInvTotal
1 |客户A | 50,000 | 50000个
2 |客户A | 15,000 | 65000个
3 |客户A | 25,000 | 90000个
4 |客户A | 40,000 | 130000个
5 |客户B | 10,000 |万个
6 |客户B | 35,000 | 45000个
7 |客户B | 80,000 | 125000个
8 | Cust C | 12,000 | 12000个
9 | Cust C | 18,000 | 30,000
例如,如果上表中的Invoice Number:1的值从50,000更新为25,000,我想根据更改更新AllInvTotal列 所以在更新发票金额后我的新表将如下:
预期结果
InvNo |客户名称| InvAmount | AllInvTotal
1 |客户A | 25,000 | 25000个
2 |客户A | 15,000 | 40000个
3 |客户A | 25,000 | 65000个
4 |客户A | 40,000 | 105000个
5 |客户B | 10,000 |万个
6 |客户B | 35,000 | 45000个
7 |客户B | 80,000 | 125000个
8 | Cust C | 12,000 | 12000个
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)
我认为您可以通过在特定行中进行更新后执行的简单更新语句来解决您的问题:
UPDATE tblInvManager SET AllInvTotal = (SELECT SUM(InvAmount) FROM
tblInvManager AS T WHERE t.Customer_Name = O.Customer_Name and T.InvNo <= O.InvNo)
FROM tblInvManager AS O WHERE O.Customer_Name = 'Cust A'
这会为AllInvTotal
为Customer Name
的其他行更新Cust A
列。
以下测试代码返回了您提供的样本数据的预期输出:
declare @tblInvManager table (
InvNo INT,
Customer_Name NVARCHAR(20),
InvAmount MONEY,
AllInvTotal MONEY)
INSERT INTO @tblInvManager VALUES (1,'Cust A ',50000,50000)
INSERT INTO @tblInvManager VALUES (2,'Cust A ',15000,65000)
INSERT INTO @tblInvManager VALUES (3,'Cust A ',25000,90000)
INSERT INTO @tblInvManager VALUES (4,'Cust A ',40000,130000)
INSERT INTO @tblInvManager VALUES (5,'Cust B ',10000,10000)
INSERT INTO @tblInvManager VALUES (6,'Cust B ',35000,45000)
INSERT INTO @tblInvManager VALUES (7,'Cust B ',80000,125000)
INSERT INTO @tblInvManager VALUES (8,'Cust C ',12000,12000)
INSERT INTO @tblInvManager VALUES (9,'Cust C ',18000,30000)
-- Sample Data
SELECT * FROM @tblInvManager
UPDATE @tblInvManager SET InvAmount = 25000 WHERE InvNo = 1
UPDATE @tblInvManager SET AllInvTotal = (SELECT SUM(InvAmount)
FROM @tblInvManager AS T WHERE t.Customer_Name = O.Customer_Name and T.InvNo <= O.InvNo)
FROM @tblInvManager AS O WHERE O.Customer_Name = 'Cust A'
--Expected Output
SELECT * FROM @tblInvManager
示例数据
预期输出
希望它有所帮助。