我需要一些帮助。
我想在任何账单中使用相同 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/