更新单列中的多行
Posted
技术标签:
【中文标题】更新单列中的多行【英文标题】: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 中正确实现这一点?
【问题讨论】:
【参考方案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
【讨论】:
以上是关于更新单列中的多行的主要内容,如果未能解决你的问题,请参考以下文章