2

我在 PostgreSQL 函数中有一个临时表,我想插入一个新VARCHAR列。它应该有一个值,该值取决于表的另一列,名为“金额”。

当金额为正时,我希望将列行的值记入贷方,而当值为负数时,应将列记入借方。

我还有一个要求:我想将金额列的值四舍五入为 2 位十进制数字

4

1 回答 1

4

你想跟ALTER TABLE ... ADD COLUMN一个UPDATE.

我最初说过ALTER TABLE ... ADD COLUMN ... USING,但这在两个方面是错误的。ADD COLUMN取一个DEFAULTnot USING- 并且您不能一次完成,因为DEFAULT表达式和USING表达式都不能引用其他列。

所以你必须这样做:

 ALTER TABLE tablename ADD COLUMN colname varchar;
 UPDATE tablename SET colname = ( CASE WHEN othercol < 0 THEN 'Credit' ELSE 'Debit' END );

仔细考虑零应该是“借方”还是“贷方”,并CASE相应地调整。

对于舍入,使用round(amount,2). 您的问题中没有足够的细节让我确定如何;可能通过UPDATE使用但没有上下文的临时表,UPDATE thetable SET amount = round(amount,2)很难知道这是否正确。该语句不可逆转地丢弃信息,因此它只能用于数据的副本。

于 2012-08-22T07:26:07.410 回答