求“先进先出法”计算库存商品余额价值的SQL语句
MS-SQL数据库,表Tb的结构和内容如下
RecId InOrOut spId Dj Sl
------------------------------------------
1 1 999 590 120
2 -1 999 (800) (110)
3 1 999 580 80
4 -1 999 (800) (50)
5 1 999 570 100
6 1 999 560 50
7 -1 999 (800) (30)
上述记录是按RecId顺序发生的
其中InOrOut为1时,表明商品入库;InOrOut为-1时,表明商品出库
Dj和Sl分别是当时入库或出库时的单价、数量
spId是不同商品的ID,为了描述直观,表中只列出一种商品的情况
显然,在第7条记录(销售出库30件)完成时,spId为999的商品剩余160件,这160件商品的价值,按先进先出法,应为90800元,即:
第6条记录的(50*560=28000) + 第5条记录的(100*570=57000) + 第3条记录的(10*580=5800),合计为90800元
求计算表Tb中现余商品的价值的SQL语句,多谢(要考虑多种商品spId的情况)。
顺祝论坛朋友们,各位光临本贴的老师们,马年顺利!
------解决方案--------------------做移动平均加权,简单很多。
------解决方案--------------------按照你的需求,查询的结果是什么呢,能贴出来不
------解决方案--------------------select
spid,
SUM(SI*InOrOut) AS SL,
SUM(DJ*SI*InOrOut) AS Value
from tb
group by spid
------解决方案----------------------加减法,更新明细账的结余数量和金额 @sBeginQty和@sBeginSum期初数量和金额,单价=金额/数量。
Create Table #ResStoreAccDet_Sums
(
GID varchar(50) null,
BeginQty Numeric(18, 6) null,
BeginSum Numeric(18, 6) null,
InQty Numeric(18, 6) null,
InSum Numeric(18, 6) null,
OutQty Numeric(18, 6)