【问题标题】:MYSQL updating a column according to all other columnsMYSQL 根据所​​有其他列更新列
【发布时间】:2016-02-25 09:56:14
【问题描述】:

这是数据库数据。

Name   id  Col1  Col2  Col3 Col4 Total  Balance
Row1   1    6     1     A     Z     7       7
Row2   2    2     3     B     Z     8       1
Row3   3    9     5     B     Y     7       2
Row4   4    16    8     C     Y     7       3

只有第一行的总数是准确的。我想将“总计”和“余额”列的条件从第 2 行更新到第 4 行。

这是对总列求和的逻辑:

update Total = Col1+Col2 if Col3 = A and Col4 <>Z
OR 
Total = Col1-Col2 if Col3 = B and Col4 <>Z
OR 
Total = Col1*Col2 if Col3 = C and Col4 <>Z

AND 也更新余额,余额 = 以前的余额 + 当前的总额

【问题讨论】:

标签: mysql sql-update


【解决方案1】:

您的逻辑重写为有效查询:

UPDATE tbl SET total = 
  IF(Col3 = 'A' and Col4 <> 'Z', Col1 + Col2,
  IF(Col3 = 'B' and Col4 <> 'Z', Col1 - Col2,
  IF(Col3 = 'C' and Col4 <> 'Z', Col1 * Col2, total))),
  balance = balance + total;

你没有写出当这些条件都不满足时应该发生什么,所以在这种情况下,我将 total 保留为之前的值,但它仍会添加到余额中。

【讨论】:

  • 这是完全不正确的,因为我想总结之前的余额,而不是总结当前余额和当前总额
  • 好的,从你写的内容看不清楚,你没有从上面的行中准确地写出之前的余额,这与之前的余额“价值”有关。要制作您想要的东西,您需要在 SQL 中使用循环,它不能通过一个查询来完成。我会在大约一个小时内为你更换它。
  • 为了确定,你写了“只有第一行的总数是准确的”......所以你想保留第一行的总数,或者你想像所有其他一样计算列的总数行?只有余额从 0 开始,row1 有余额 0 + total,第 2 行有 balance_row1 + total_row2 等等?当这些条件都不满足时,总价值应该是多少?
  • 感谢您的关注,Microproz。最重要的部分是余额=以前的余额+当前的总额。 :)
  • 表示第2行余额=第1行余额+第2行总数
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-19
相关资源
最近更新 更多