久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

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

129次閱讀
沒有評論

共計 2129 個字符,預計需要花費 6 分鐘才能閱讀完成。

自動寫代碼機器人,免費開通

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

代碼如下:

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 問一下細節

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-12-04發表,共計2129字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 邵武市| 枣庄市| 资源县| 富锦市| 沂南县| 四会市| 喀喇沁旗| 客服| 同心县| 龙川县| 常熟市| 丰原市| 建德市| 静海县| 茂名市| 仲巴县| 图们市| 芒康县| 富宁县| 塘沽区| 清远市| 望奎县| 睢宁县| 重庆市| 湾仔区| 雷山县| 汝南县| 前郭尔| 宽城| 昭苏县| 营口市| 清流县| 平邑县| 安溪县| 龙江县| 金湖县| 和林格尔县| 天台县| 牙克石市| 凉山| 凤翔县|