【问题标题】:Updating multiple rows in single column更新单列中的多行
【发布时间】:2020-02-18 09:05:16
【问题描述】:
我需要使用生成多行的子查询的结果更新新添加的列(存储发票所有项目的总和)。我在 Invoice 表中添加了新列。
ALTER TABLE Invoice
ADD ItemsSum int NULL
我尝试了以下查询,但由于多个结果而出错
UPDATE Invoice
SET ItemsSum = (SELECT SUM(Amount)
FROM InvoiceItem it
INNER JOIN Invoice i ON it.InvoiceID = i.ID
GROUP BY i.ID)
如何在 SQL Server 中正确实现这一点?
【问题讨论】:
标签:
sql
sql-server
tsql
sql-update
【解决方案1】:
您可以使用相关子查询:
UPDATE Invoice
SET ItemsSum = (SELECT SUM(it.Amount)
FROM InvoiceItem it
WHERE it.InvoiceID = Invoice.ID
);
如果基础发票金额发生变化,ItemsSum 将无效。
【解决方案2】:
相关的是:
UPDATE Invoice
SET ItemsSum = (SELECT SUM(invc.Amount)
FROM InvoiceItem invc
WHERE invc.InvoiceID = Invoice.ID
GROUP BY Invoice.ID;
);
【解决方案3】:
Yogesh 的回答是正确的,但如果您愿意,也可以使用显式聚合来做到这一点:
UPDATE i
SET ItemsSum = ii.sumAmount
FROM Invoice i LEFT JOIN
(SELECT ii.InvoiceID, SUM(Amount) as sumAmount
FROM InvoiceItem it
GROUP BY ii.InvoiceID
) ii
ON ii.InvoiceID = i.ID