Sql 使用SUM()更新
我的表格结构与下面的相似Sql 使用SUM()更新,sql,sql-server-2008,Sql,Sql Server 2008,我的表格结构与下面的相似 Table1 BatchID Quantity ProductID 1 10 1 1 10 1 1 20 2 我需要按产品ID分组,得到最大数量,然后将其相加,并更新表2。因此,表2中的结果是 Table2 BatchID Total 1 30 我提出的更新查询是 UPDATE T2 SET Tabl
Table1
BatchID Quantity ProductID
1 10 1
1 10 1
1 20 2
我需要按产品ID分组,得到最大数量,然后将其相加,并更新表2。因此,表2中的结果是
Table2
BatchID Total
1 30
我提出的更新查询是
UPDATE T2
SET
Table1.Total = Sum(sub.quantity)
FROM Table2 T2
INNER JOIN
(SELECT
MAX(T1.Quantity) quantity,
FROM Table1 T1
GROUP BY T1.ProductID,Ti.Quantity) AS sub ON sub.BatchID= T1.BatchID
WHERE T1.BatchID = 1
当我运行这个查询时,它抛出这个错误
“聚合不能出现在UPDATE语句的集合列表中。”
请帮我纠正这个错误 再次嵌套子查询…我认为mssql可以处理这一点:
UPDATE T2
SET
Table1.Total = sub.quantity
FROM Table2 T2
INNER JOIN
select sum(a.quantity) as quantity
from
(SELECT
MAX(T1.Quantity) quantity,
FROM Table1 T1
GROUP BY T1.ProductID,Ti.Quantity)a) AS sub ON sub.BatchID= T1.BatchID
WHERE T1.BatchID = 1
这将解决您的问题:
UPDATE a
SET Total = b.Quantity
FROM Table2 a
INNER JOIN ( SELECT x.BatchID ,
SUM(y.Quantity) AS Quantity
FROM Table2 x
INNER JOIN ( SELECT z.BatchID ,
z.ProductID ,
MAX(z.Quantity) Quantity
FROM Table1 z
WHERE z.BatchID = 1
GROUP BY z.BatchID ,
z.ProductID
) y ON y.BatchID = x.BatchID
GROUP BY y.BatchID
) b ON a.BatchID = b.BatchID
表2中是否有每个批次的条目,或者是否需要作为该批次的一部分生成该条目?你能解释使用Max()的逻辑吗?为什么你不考虑产品?你可能必须先把这些和存储到另一个变量中。谢谢!我错过的是鸟巢。非常感谢您随时提供的帮助,这是我们在此所乐于做的;)如果你擅长的话,别忘了接受答案。
UPDATE a
SET Total = b.Quantity
FROM Table2 a
INNER JOIN ( SELECT x.BatchID ,
SUM(y.Quantity) AS Quantity
FROM Table2 x
INNER JOIN ( SELECT z.BatchID ,
z.ProductID ,
MAX(z.Quantity) Quantity
FROM Table1 z
WHERE z.BatchID = 1
GROUP BY z.BatchID ,
z.ProductID
) y ON y.BatchID = x.BatchID
GROUP BY y.BatchID
) b ON a.BatchID = b.BatchID