【发布时间】:2021-12-28 21:57:22
【问题描述】:
我有 2 张桌子(如下所示) - Invoice 和 Payments。一张发票可以有多次付款。我需要从Payments 到SUM 和PayAmt 的总数,并更新Invoice 表中的PayTotal 列。
这不起作用:
UPDATE Invoices
SET Invoices.PayTotal = Payments.Total
FROM Invoices
INNER JOIN
(SELECT InvNum_FK, SUM(PayAmt) as Total
FROM Payments) ON Invoices.InvNum_PK = Payments.InvNum_FK
CREATE TABLE dbo.Invoices
(
InvNum_PK nvarchar(255) PRIMARY KEY,
InvAmt money,
InvDate date,
CustName nvarchar(255),
PayTotal money,
PayCount int
);
CREATE TABLE dbo.Payments
(
PayNum_PK int PRIMARY KEY,
InvNum_FK nvarchar(255)
FOREIGN KEY REFERENCES dbo.Invoices(InvNum_PK),
PayAmt money,
PayDate date,
);
INSERT INTO Invoices
VALUES ('GLI101', 838.93, '2021-08-01', 'George Washington', 0, 0);
INSERT INTO Invoices
VALUES ('GLI202', 1280.26, '2021-08-02', 'Abe Lincoln', 0, 0);
INSERT INTO Invoices
VALUES ('GLI303', 1456.23, '2021-08-03', 'Tom Jefferson', 0, 0);
INSERT INTO Invoices
VALUES ('GLI404', 1124.97, '2021-08-04', 'Jim Madison', 0, 0);
INSERT INTO Payments VALUES (1, 'GLI101', 223.33, '08/15/2021')
INSERT INTO Payments VALUES (2, 'GLI101', 211.88, '09/16/2021')
INSERT INTO Payments VALUES (3, 'GLI101', 316.44, '09/14/2021')
INSERT INTO Payments VALUES (4, 'GLI404', 415.46, '09/10/2021')
INSERT INTO Payments VALUES (5, 'GLI404', 115.46, '09/04/2021')
【问题讨论】:
-
停下来,只是不要。数据应保持无冗余以避免出现不一致的可能性。因此,将一张表上的总和写入另一张表并不是一件好事。如果您需要总和,您可以随时查询并获得 正确 结果。为方便起见,您可以创建一个视图来存储此类查询,这样您就不必每次都重复它。
-
不要不、从不、从不发布表格图片。将
CREATE和INSERT语句发布为文本。 -
我正在使用不会创建计算字段值的前端 (CRUD),因此我需要获取计算值并更新数据库中的列。我在这个板上发现了许多帖子,其中有问题和答案都在做同样的事情,但我无法工作。
-
那么,如果工具不够用,不如更改访问数据库的工具,而不是对数据库进行非规范化...
-
在一个完美的世界里,我会这样做。幸运的是,我能够从人们“非规范化”(不确定这是否真的是一个词)他们的数据库发布的许多其他解决方案中拼凑出我自己的答案,就像我自己做得很好。
标签: sql join sum sql-update