数据库中如何使用计算列实现移动加权平均算法
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:if OBJECT_ID('tb') is no
千家信息网最后更新 2025年02月01日数据库中如何使用计算列实现移动加权平均算法
这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
代码如下:
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安全错误
数据库的锁怎样保障安全
移动校招网络技术类要求
乐高无限游戏服务器有什么用
上海企业软件开发出厂价格
客户端软件用什么软件开发
厦门基于cad软件开发
启明星辰网络安全大赛
ad域控服务器配置
宁波游戏软件开发工具
华为商店连不上服务器怎么解决
安卓科技软件开发
超跌互联网科技股
dede数据库还原失败
网络安全及信息化杂志
南京蜂群网络技术有限公司
服务器安全狗被挟持
郑州网络安全加固方案
南阳的技校有软件开发
校园网络安全措施论文
军队里面有没有软件开发
网络安全宣传手绘画教程
软件开发计算机培训学校春季招生
网络安全技术行业发展
传奇私服用sql做数据库
用友u8服务器越用越慢
福建网络安全产业联盟
路标 数据库
静安区参考网络技术服务以客为尊
无线网络技术的研究
软件开发人员质量职责
amax服务器