数据库中如何使用计算列实现移动加权平均算法
发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:if OBJECT_ID('tb') is no
千家信息网最后更新 2025年11月07日数据库中如何使用计算列实现移动加权平均算法
这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
代码如下:
if OBJECT_ID('tb') is not null drop table tb if OBJECT_ID('TEMP') is not null drop table TEMP if OBJECT_ID('FUN_NOWPRICE') is not null drop FUNCTION FUN_NOWPRICE if OBJECT_ID('FUN_NOWQTY') is not null drop FUNCTION FUN_NOWQTY go create table tb( id INT ,Date1 datetime ,ctype varchar(10) ,qnt float ,pri float ) --qnt 数量 --pri 单价 insert tb select 0,'2009-1-1', '进货', 10, 100 union all select 1,'2009-1-1', '进货', 50, 120 union all select 2,'2009-1-2', '出货', 30, 150 union all select 3,'2009-1-3', '进货', 40, 130 union all select 4,'2009-1-3', '出货', 25, 160 GO -- 我要算成本价,按移动加权平均 /* 1进货以后的成本价c1=(10*100+50*120)/(10+50) 2出货以后的成本价c2=((10+50)*c1-30*c1)/((10+50)-30)=C2 --也就是说出货的时候价格不变 3进货以后的成本价c3=(((10+50)-30)*c2+40*130)/((10+50)-30+40) --也就是说进货的时候单价更新为(当前库存的总价值+库总价值)/入库后总数量 以此类推... */ --想了半天,觉得只能用循环、递归、游标实现,因为出库时的价格是根据之前的记录算出来的。 --也许有经典的算法,谁知道的麻烦教教我或者发个链接。 --这个FUNCTION就是变相实现递归的 CREATE FUNCTION FUN_NOWPRICE(@ID INT) RETURNS NUMERIC(19,6) AS BEGIN RETURN (SELECT ISNULL(NOWPRICE,0) FROM (SELECT MAX(NOWPRICE) 'NOWPRICE' FROM TEMP T1 WHERE ID<@ID AND NOT EXISTS(SELECT 1 FROM TEMP WHERE ID>T1.ID AND ID<@ID)) T) END GO --这个FUNCTION是为了计算方便 CREATE FUNCTION FUN_NOWQTY(@ID INT) RETURNS NUMERIC(19,6) AS BEGIN RETURN (SELECT ISNULL(SUM(CASE CTYPE WHEN '进货' THEN QNT ELSE 0-QNT END),0) FROM TEMP WHERE ID<@ID) END GO --建一个临时表,包含原表参与运算的全部字段 create table TEMP( id INT ,Date1 datetime ,ctype varchar(10) ,qnt float ,pri float ,NOWPRICE AS CASE ctype WHEN '出货' THEN DBO.FUN_NOWPRICE(ID) ELSE (DBO.FUN_NOWPRICE(ID)*DBO.FUN_NOWQTY(ID)+QNT*PRI)/(DBO.FUN_NOWQTY(ID)+QNT) END) INSERT INTO TEMP SELECT * FROM TB ORDER BY DATE1 ASC,ID ASC SELECT * FROM TEMP /* 0 2009-01-01 00:00:00.000 进货 10 100 100 1 2009-01-01 00:00:00.000 进货 50 120 116.666666666667 2 2009-01-02 00:00:00.000 出货 30 150 116.666667 3 2009-01-03 00:00:00.000 进货 40 130 124.285714428571 4 2009-01-03 00:00:00.000 出货 25 160 124.285714 */这个写法的不完善处在于它是根据ID和日期对记录进行排序的,对于同一天的出入库情况没有处理。实际运用中可以根据CREATEDATE等时间标志性字段来进行排序。
感谢各位的阅读!关于"数据库中如何使用计算列实现移动加权平均算法"这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!
成本
成本价
算法
移动
数据
数据库
也就是
也就是说
价格
内容
单价
字段
总价
总价值
数量
时候
更多
篇文章
递归
排序
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网易服务器缩
nba历史得分排名数据库
sql实验6数据库安全性
健康血样数据库
苹果服务器在中国有吗
插入数据库会乱码
软件开发岗位自我介绍
安卓软件开发 pdf
晚会主持软件开发
黄淮学院数据库期末考试题
苹果手机壳数据库
服务器配置公众号后台的好处
bromine软件开发
小米网络安全密匙
网络安全技能竞赛题库app
商道小说软件开发
医保局网络安全事件应急预案
计算机网络技术等级划分
网络安全行业规模占比
四川网络技术转让采购
云南电脑服务器托管云主机
四季风互联网科技网络有限公司
聊城市快点网络技术有限公司
三丰云服务器怎样使用
idm服务器响应
跨表怎么加数据库
四川和旭互联网科技公司
软件开发前沿框架技术
数据库规划有哪些内容
中继代理服务器配置