数据库中如何使用计算列实现移动加权平均算法
发表于:2024-11-26 作者:千家信息网编辑
千家信息网最后更新 2024年11月26日,这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。代码如下:if OBJECT_ID('tb') is no
千家信息网最后更新 2024年11月26日数据库中如何使用计算列实现移动加权平均算法
这篇文章给大家分享的是有关数据库中如何使用计算列实现移动加权平均算法的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
代码如下:
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安全错误
数据库的锁怎样保障安全
反垄断网络安全
网络安全的挑战和发展
苹果手机网络数据库软件
服务器运行音频
黑龙江电子软件开发条件
适合决策树的数据库
数学建模数据库
哪一个数据库提供外文电子图书
fae转软件开发有人要吗
计算机网络技术英语术语
数据库的表怎样拆分
福州管理系统软件开发
sam数据库没有该工作站
2020年大话西游2开服务器
网络安全意识的结尾怎么写
扩DB2数据库字段长度
服务器白话
铂邦网络技术有限公司
使用代理服务器玩游戏
依兰租房软件开发
应用数据库的软件
网络安全公司资格
死亡之夜专用服务器架设
服务器安全狗好用么
数据库中answers什么意思
综合测评数据库系统
司法所做实网络安全工作
深刻认识到了网络安全的重要性
数据库发布订阅项目属性
服务器白话