我在mssql存储过程中有这个查询:
UPDATE @tmp_aging
SET @balance=balance=(CASE WHEN @partner_code<>partner_code THEN 0 ELSE ISNULL(@balance,0) END)+ISNULL(debit,0)-ISNULL(credit,0),
@partner_code=partner_code;
如您所见,变量@balance从balance列更新,该列从返回多行的表达式更新。
换句话说,我们为每一行同时更新变量@balance和列平衡,至少我认为它是如何工作的。跟踪“前进”的情况。会计平衡。
反正, 我将所有存储过程转换为postgresql函数,那么如何在postgresql中执行相同的操作呢?
答案 0 :(得分:0)
我想要的东西:将SUM(余额)退还给v_balance
您可以将更新包装在CTE中:
with updated as (
update the_table
set ...
where ...
returning balance
)
select sum(balance)
into v_balance
from updated;
但是,你原来的声明:
UPDATE @tmp_aging
SET @balance=balance=(CASE WHEN ... END) ..,
@partner_code=partner_code;
不在SQL Server中进行聚合,所以我不确定这是否真的是你想要的。