如果您不知道的AVCO永久方法,只需阅读这篇文章或这一个才能回答这个问题:
为了更清楚地说明,我将我所拥有的数据放在事务表中:

数量栏包含已购买或售出的货物数量(负数表示销售发票)
我需要在Server中编写一个查询,该查询返回如下所示的记录集:

成本列包含交易时的产品成本,按according方法计算。
下面是生成表和数据所需的查询:
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 )更新
简单介绍一下我是如何计算成本字段的:
((PreviousCost*PreviousStock)+(CurrentPrice*CurrentQuantity))/CurrentStock发布于 2017-09-10 11:17:12
以下查询将满足您的需要。
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输出:
(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)https://stackoverflow.com/questions/46138540
复制相似问题