给出如下表格。我想移动并将列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
答案 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做了很多工作,但我怀疑你需要做任何优化(假设你有正确的主键等等)