我有x行的列值,并且“只是”想要将它们一起添加并更新最高行号并将其他值清零:
SELECT rowId, addCol FROM table WHERE rowId=1 OR rowId=2
rowId |的 ADDCOL
1 | 100个
2 | 200个
3 | 67
这就是我想要的东西(我知道这完全错了)但不知道如何表达它!
UPDATE table SET addCol3=addCol1+addCol2+addCol3, addCol1=0, addCol2=0
rowId |的 ADDCOL
1 | 0
2 | 0
3 | 367
答案 0 :(得分:1)
UPDATE table t1
JOIN table t2 ON (t1.rowId > t2.rowId)
LEFT OUTER JOIN table t3 ON (t1.rowId < t3.rowId)
SET t1.addCol = t1.addCol + t2.addCol,
t2.addCol = 0
WHERE t3.rowId IS NULL;
说明:任何引用多行的SQL表达式都应使用JOIN
完成。在这种情况下,我们希望t1
成为任何其他行中没有更大rowId
的行。如果t1
具有最大rowId
,则表示t3
找不到匹配的行,因此t3
将为NULL。
现在,我们知道t1
具有最大rowId
,并且与所有其他行(t2
)匹配的rowId
较小。将t2
值添加到t1
中的累计总数后,将其归零。