sql - 此更新查询在有连接时如何设置总和

标签 sql sql-server aggregate

UPDATE
Chemicals.dbo.ChmProductCompositions 

SET Vhap = SUM(PercentOfProduct)

FROM 
Chemicals.dbo.ChmProductCompositions  PC
JOIN Chemicals.dbo.ChmCompositionChemicals CC ON CC.ProductCompositionID = pc.ProductCompositionID
JOIN Chemicals.dbo.ChmChemicals C ON C.ChemicalID = CC.ChemicalID
WHERE IsHazardous = 1

我有上面的查询,我想知道类似上面的查询是获取总和并设置它还是每个特定的总和并设置它?

我还想知道它是否获取总和并将每一项都设置为总和我如何才能获取每个单独项目的总和然后将其设置为总和?

最佳答案

事实并非如此。只需尝试查询——它是完全安全的,因为它会返回一个错误。 UPDATE 不是聚合,因此不允许 SUM()

您需要在加入之前聚合:

UPDATE pc
    SET Vhap = cc.PercentOfProduct
    FROM Chemicals.dbo.ChmProductCompositions pc JOIN
         (SELECT cc.ProductCompositionID, SUM(PercentOfProduct) as PercentOfProcue
          FROM Chemicals.dbo.ChmCompositionChemicals CC JOIN
               Chemicals.dbo.ChmChemicals C
               ON C.ChemicalID = CC.ChemicalID
          GROUP BY cc.ProductCompositionID
         ) cc
         ON CC.ProductCompositionID = pc.ProductCompositionID
    WHERE IsHazardous = 1;

请注意,IsHazardous 可能属于子查询。你的问题不清楚。

关于sql - 此更新查询在有连接时如何设置总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68038450/

相关文章:

mysql - 将 ResultSet 的多行组合成一行

sql-server - 为什么 INT 不比 UNIQUEIDENTIFIER 更高效(根据执行计划)?

python - Groupby 和 sum 行以聚合 PRODUCT 列的多个值

c++ - 为什么我不能像这样淡化 std::array?

r - 聚合方法以不同方式处理缺失值 (NA)

php - 如何获取每个类别中具有特定百分比的数据

sql - Teradata SQL 性能调整 : STRTOK_SPLIT_TO_TABLE: EXPLAIN Failed. 3738:字符串长度超过 31000 个字符

sql - 对 XML 中的节点值求和时 SQL Server 的奇怪行为

sql - 在 sql 脚本中使用数据库的名称作为完整的表名

sql - 比较存储过程中的日期时间值