如何将一列添加到表中所有行的另一列?

时间:2013-02-28 04:34:49

标签: sql postgresql

给出如下表格。我想移动并将列escrow1中的所有值添加到它对应的uid的balance1。喜欢escrow2来平衡2。所以在下面的情况下。具有uid 4的行将具有1858000 + 42000的余额,具有uid 3的行将具有balance1 = 1859265 + 30735并且escrow1 = 0,并且具有uid 2的行将具有balance2 = 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

2 个答案:

答案 0 :(得分:3)

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

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

希望这有帮助。

答案 1 :(得分:0)

我认为这很简单:

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

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