麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 數據庫 > 文庫 > 正文

用計算列實現移動加權平均算法

2020-10-29 21:53:33
字體:
來源:轉載
供稿:網友
復制代碼 代碼如下:

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等時間標志性字段來進行排序。
--------------------------------------------------------------------------------

第一次寫技術性博客,希望這是一個好的開始,歡迎大家對我的算法進行指正^_^
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 国产超碰人人做人人爱 | julieann艳星激情办公室 | 中文字幕极速在线观看 | 激情视频日韩 | 成人免费一区二区三区在线观看 | 91成人一区| 精品视频在线免费看 | 超碰97最新 | 国产亚洲精品久久久久婷婷瑜伽 | 黄色毛片前黄 | 91精品国产综合久久久欧美 | 黑人一区| 精品无吗乱吗av国产爱色 | 欧美精品亚洲人成在线观看 | 久久国产精 | 极品xxxx欧美一区二区 | 在线中文字幕网站 | 国产精品jk白丝蜜臀av软件 | 一级免费大片 | 成人午夜在线免费观看 | 成人福利视频在线 | 色就色 综合偷拍区91网 | 久草在线资源视频 | 免费看成人av| 精品99在线视频 | 国产视频在线观看一区二区三区 | 成人免费一区二区三区视频网站 | 中日韩乱码一二新区 | 九九热在线精品视频 | 国产瑟瑟视频 | 日韩黄色一区 | 国产亚洲精品久久久久婷婷瑜伽 | 亚洲午夜久久久久 | 一区二区三区四区视频在线观看 | 黄色一级片免费观看 | 久久99久久98精品免观看软件 | 久久99精品久久久久久青青日本 | 欧美 videos粗暴 | 成人黄色小视频网站 | 男女生羞羞视频网站在线观看 | 免费91在线|