我有2个表,如:
CREATE TABLE [dbo].[Inventory](
[ID] [int] IDENTITY(1,1) NOT NULL
[SerialNo] [nvarchar](50) NOT NULL,
[Quantity] [decimal](12, 3) NULL)
CREATE TABLE [dbo].[InventoryDetails](
[ID] [int] IDENTITY(1,1) NOT NULL,
[InventoryID] [int] NOT NULL,
[ProductID] [int] NOT NULL,
[Quantity] [decimal](10, 3) NOT NULL)
我想执行以下查询:
Update I set Quantity=Sum(ID.Quantity)
from Inventory I
Inner Join inserted ID on I.ID=ID.InventoryID
SQL Server出现此错误:
An aggregate may not appear in the set list of an UPDATE statement.
这样做的真正方法是什么?我是否需要按条款分组?
答案 0 :(得分:3)
我认为代码用在InventoryDetails表的触发器中(因为它使用特殊的inserted表)。在问题中指定它会很好。
这是SQL Server的限制。可以使用子查询来克服它。
UPDATE I SET Quantity=ID.Sum_Quantity
FROM Inventory I
INNER JOIN (SELECT InventoryID, SUM(Quantity) AS Sum_Quantity
FROM inserted GROUP BY InventoryID) ID ON I.ID=ID.InventoryID
答案 1 :(得分:0)
我修改了一下你的更新sql脚本,我认为应该是这样的:
update Inventory as I
set I.Quantity = (select sum(ID.Quantity) from InventoryDetails as ID)
where I.ID = (select IDS.ID from InventoryDetails as IDS where IDS.ID = I.ID)
一点解释:
从InventoryDetails中选择sum(ID.Quantity)作为ID
此选择会执行您想要的聚合。
其中I.ID =(从InventoryDetails中选择IDS.ID作为IDS,其中IDS.ID = I.ID)
此模拟您的内部联接。 (如果我错了,请在此纠正我,谢谢)。