首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用AVCO永续法计算仓库成本

如何用AVCO永续法计算仓库成本
EN

Stack Overflow用户
提问于 2017-09-10 08:00:27
回答 1查看 209关注 0票数 1

如果您不知道的AVCO永久方法,只需阅读这篇文章这一个才能回答这个问题:

为了更清楚地说明,我将我所拥有的数据放在事务表中:

数量栏包含已购买或售出的货物数量(负数表示销售发票)

我需要在Server中编写一个查询,该查询返回如下所示的记录集:

成本列包含交易时的产品成本,按according方法计算。

下面是生成表和数据所需的查询:

代码语言:javascript
复制
CREATE TABLE [dbo].[Transactions]
    (
      [Id] [INT] NOT NULL ,
      [Date] [DATE] NOT NULL ,
      [Coefficient] [INT] NOT NULL ,
      [Quantity] [INT] NOT NULL ,
      [Price] [INT] NOT NULL ,
      [Cost] [REAL] NOT NULL ,
      CONSTRAINT [PK_Transactions] PRIMARY KEY CLUSTERED ( [Id] ASC )
        WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
               IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
               ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
    )
ON  [PRIMARY]

GO
INSERT  [dbo].[Transactions]
        ( [Id], [Date], [Coefficient], [Quantity], [Price], [Cost] )
VALUES  ( 1, '2017-01-01', 1, 10, 100, 100 ),
        ( 2, '2017-01-02', 1, 20, 120, 113.33 ),
        ( 3, '2017-01-03', -1, 5, 200, 113.33 ),
        ( 4, '2017-01-04', 1, 10, 150, 123.8 ),
        ( 5, '2017-01-05', -1, 3, 200, 123.8 ),
        ( 6, '2017-01-06', -1, 10, 200, 123.8 ),
        ( 7, '2017-01-07', 1, 10, 180, 141.36 ),
        ( 8, '2017-01-07', -1, 5, 220, 141.36 )

更新

简单介绍一下我是如何计算成本字段的:

代码语言:javascript
复制
((PreviousCost*PreviousStock)+(CurrentPrice*CurrentQuantity))/CurrentStock
EN

回答 1

Stack Overflow用户

发布于 2017-09-10 11:17:12

以下查询将满足您的需要。

代码语言:javascript
复制
CREATE TABLE #Temp
(
 Date1      DATE,
 AvgCost        decimal(18,4)
 )

 DECLARE @QTY       FLOAT,
         @QTY1      FLOAT,
         @Price     FLOAT,
         @Date      DateTime,
         @Cost      FLOAT, 
         @Cost1     FLOAT,
         @RoundCost FLOAT


SELECT @Cost = 0, @QTY = 0, @RoundCost=0
DECLARE Cur_ CURSOR FOR
 SELECT [Date], [Coefficient]*[Quantity], [Price],  ([Quantity] * [Price])  
FROM [dbo].[Transactions]
ORDER BY [Date] ASC, [Coefficient] DESC

OPEN Cur_
FETCH NEXT FROM Cur_ INTO @Date, @QTY, @Price, @Cost
WHILE @@FETCH_STATUS = 0
BEGIN
    IF(@QTY > 0)
    BEGIN
    SELECT @Cost = @Cost + @RoundCost
    END
    ELSE
    BEGIN
    SELECT @Cost = (@Cost1 * (@QTY+@QTY1))
    END

    SELECT @QTY = @QTY + ISNULL(SUM([Coefficient]*[Quantity]),0)  FROM [dbo].[Transactions]
    WHERE  [Date] < @Date

    --SELECT  @Date, @QTY, @Price,  @Cost,  @Cost / @QTY
    INSERT INTO #Temp
    SELECT  @Date, @Cost / @QTY
    SET @Cost1 = @Cost / @QTY
    SET @QTY1 =  @QTY
    SET @RoundCost = @Cost
    FETCH NEXT FROM Cur_ INTO @Date, @QTY, @Price, @Cost
END 

CLOSE Cur_
DEALLOCATE Cur_

SELECT * FROM #Temp T
DROP TABLE #Temp

输出:

代码语言:javascript
复制
(1 row(s) affected)
Date1      AvgCost
---------- ---------------------------------------
2017-01-01 100.0000
2017-01-02 113.3333
2017-01-03 113.3333
2017-01-04 123.8095
2017-01-05 123.8095
2017-01-06 123.8095
2017-01-07 141.3690
2017-01-07 224.5273

(8 row(s) affected)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46138540

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档