来自 SELECT WHERE 的 SQL 多条更新记录

标签 sql postgresql

我需要一些帮助。

我想在任何账单中使用相同 id 的所有 Material 。

像这样

bill no. 001
jellopy x1ea
jellopy x1ea
jellopy x1ea
zargon x1ea

结果应该是

bill no. 001
jellopy x3ea
zargon x1ea

所以,我想做这样的事情

1.选择+求和 2.更新 3.删除重复

这是我的旧(dbill)表

账单

id  mat  qty
01  A1   1
01  A1   1
01  A1   1
01  A2   1

id  mat  qty
[01  A1   1] < same mat&id = SUM it
[01  A1   1] < same mat&id = SUM it
[01  A1   1] < same mat&id = SUM it
 01  A2   1

and this is SQLFiddle for test http://sqlfiddle.com/#!15/b30a3c

1相同 Material 的SUM数量

SELECT mat,id,sum(qty) result
FROM dbill
GROUP BY id,mat

[2] 得到这样的结果

id  mat  qty
01  A1   3
01  A2   1

[3] 所以...我会这样更新

UPDATE dbill
SET qty = result
FROM dbill t
INNER JOIN
(SELECT mat,id,sum(qty) result
FROM dbill
GROUP BY id,mat) s
ON s.id = t.id
AND s.mat = t.mat

问题是当我 [3] UPDATE 这里是结果

id  mat  qty
01  A1   3
01  A1   3
01  A1   3
01  A2   3

因为正确的结果应该是

id  mat  qty
01  A1   3
01  A1   3
01  A1   3
01  A2   1     <

非常感谢您的理解和回答...

最佳答案

对我来说,您的查询似乎没问题,只需将 UPDATE dbill 替换为 UPDATE t

UPDATE t <----
SET qty = result
FROM dbill t
INNER JOIN
(SELECT mat,id,sum(qty) result
 FROM dbill
 GROUP BY id,mat) s
ON s.id = t.id
AND s.mat = t.mat

关于来自 SELECT WHERE 的 SQL 多条更新记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40482228/

相关文章:

mysql - 用户定义的函数仅返回NULL

php - 子查询必须只返回一列

postgresql - PostgreSQL 中的平均聚合时态数据库 10 分钟间隔

sql - SQL Server 中事务的正确使用

postgresql - 使用 Postgres 的 Golang UPDATE 专栏

sql - 根据行值计算行数

sql - Postgresql 加入选择语句

sql - 使用函数处理负偏移量

mysql - SQL 中的多个 IF 语句

sql - 在SQL Server中无时间比较日期的最佳方法