Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用SUM()更新_Sql_Sql Server 2008 - Fatal编程技术网

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