大家好。我在写一个证券买卖纪录和会计系统。如大家平常所见,证券成本的计价是用移动平均成本方法(相对于先进先出和后进先出)来计算仓里的证券的价格。但我尝试写一个查询时,被一个地方絆住了。我知道论坛上有许多做会计系统的高手,希望大家能帮忙指点一下。如下图,SETTLEMENT_DATE,MATURE_DATE,PAR_VALUE,DISC_RATE是填入的。该证券是一个discount note,也就是该证券以折扣价买入,买入价(change of COST  LC)和面值(PAR_VALUE)之间的差额是利息收入。所以par_value可以理解成“数量”,DISC_RATE(discount rate折扣率)可以理解成单价。
如下图,PAR_VALUE为正的交易为买入,为负的是卖出。BANK_LC为现金进出,=PAR_VALUE*DISC_RATE (理解为数量*单价)。第一第二第三行都是买入,change of COST LC=-[BANK LC]。accumulative PAR VALUE和accumulative COST LC都是累计,从第一行加到当前那一行。每次买入平均成本都会变,AVG COST=accumulative COST LC/accumulative PAR VALUE。
直到第三行都问题不大,第四行卖出,问题就来了。change of COST LC的公式要变成(change of) PAR_VALUE*AVG_COST(第三行的AVG COST),这都好解决,用iif可以根据买入卖出用不同公式。但问题在于“AVG COST”从"accumulative COST LC"算出,"accumulative cost LC"从当前行之前的"change of COST LC"算出,在卖出时"chang of cost LC"从当前行之前一行“AVG COST"算出。这不是一个循环引用计算,但怎样用SQL表达出来,是个很大的问题。也想过用中间表用insert语句一行一行的插入黄色的那几个fields,然后用储存的数字来进行计算。但觉得这样很危险,要是一个交易出错了就要改表上已经储存了的数字。
附上图片数据的excel源文件谢望大家给点意见。谢谢!