91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據庫中如何使用計算列實現移動加權平均算法

發布時間:2021-07-18 17:54:58 來源:億速云 閱讀:426 作者:小新 欄目:數據庫

這篇文章給大家分享的是有關數據庫中如何使用計算列實現移動加權平均算法的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

代碼如下:

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

感謝各位的閱讀!關于“數據庫中如何使用計算列實現移動加權平均算法”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

时尚| 平泉县| 汉源县| 云安县| 武威市| 北辰区| 蚌埠市| 体育| 安宁市| 元阳县| 汝南县| 焦作市| 瓦房店市| 龙陵县| 长葛市| 噶尔县| 桐乡市| 哈巴河县| 德安县| 曲周县| 无棣县| 民丰县| 宿州市| 山东省| 新丰县| 电白县| 高州市| 博兴县| 长丰县| 永安市| 铁力市| 肇源县| 阜康市| 晋宁县| 遵义县| 南江县| 邳州市| 临漳县| 四会市| 伊通| 禹城市|