0

给定如下表。我想将列 escrow1 中的所有值移动并添加到它对应的 uid 的 balance1 中。并且喜欢 escrow2 到 balance2。所以在下面的情况下。uid 4 的行余额为 1858000+42000,uid 3 的行余额 1 = 1859265+30735 和 escrow1 = 0,uid 2 的行余额 2 = 940050+1050000 和 escrow2 = 0。其他是一样的。是否可以在一个查询中执行此操作?我一直在努力,但我想不出一个解决方案,所以我可能不得不在一个函数中执行它并循环所有行,但我不希望这样做。另外我知道只有少量行的托管值不等于 0。鉴于此,有没有办法优化查询?

 uid | balance1 | escrow1 | balance2 | escrow2 
-----+----------+---------+----------+---------
   1 |     5000 |       0 |        0 |       0
   9 |     5000 |       0 |        0 |       0
   6 |  1900000 |       0 |  1899960 |       0
   5 |  1900000 |       0 |  1900000 |       0
   7 |  1900000 |       0 |  1900000 |       0
   8 |  1900000 |       0 |  1900000 |       0
   4 |  1858000 |   42000 |  1900014 |       0
   2 |  1910000 |       0 |   940050 | 1050000
   3 |  1859265 |   30735 |  1895050 |       0
4

2 回答 2

3

如果您只想从表中选择数据,请使用 Greg 提供的查询。如果您想更新表本身,以下查询可以提供帮助。

Update TABLENAME
     Set Balance1 = Balance1 + Escrow1,
         Balance2 = Balance2 + Escrow2,
         Escrow1 = 0, Escrow2 = 0

希望这可以帮助。

于 2013-02-28T04:48:52.523 回答
0

我认为这很简单:

SELECT uid
      ,Balance1 + Escrow1 AS Balance1
      ,Balance2 + Escrow2 AS Balance2
FROM   TableName

在优化方面,我对 Postgre 做的不多,但我怀疑你需要做任何优化(假设你有正确的主键等)

于 2013-02-28T04:44:35.097 回答