【发布时间】:2018-03-04 13:31:48
【问题描述】:
我正在尝试重建我的公司 kardex。我需要使用“平均成本法”,它应该考虑每笔交易在其特定日期时间的平均成本。
我有一个包含所有进出库存交易(所有移动)的简单表格。
每笔传入交易(购买)的定价都是正确的,因为我从相应的发票中获取单位成本。
问题: 所有销售交易(发货库存)都没有单位成本(因为我需要重建这些成本)。 我知道我可以使用游标,但我们都知道那里的性能问题。
我准备了一个简单的数据来更好地解释自己。 请注意,所有销售(传出交易)都没有成本,我认为使用简单的窗口函数不会有帮助,因为每一行都取决于先前的计算。所以,我有点需要根据之前的计算进行计算..??
DECLARE @Resultado TABLE (Row_ID BIGINT IDENTITY NOT NULL PRIMARY KEY, Inventory_Name VARCHAR(100), Transaction_Date DATETIME, DIRECTION BIT, Transaction_Name VARCHAR(100),Transaction_Quantity INT, Transaction_UnitCost NUMERIC(18,2), Transaction_Amount NUMERIC(18,2), AVERAGE_UNITCOST_AT_TRANSACTION_DATE NUMERIC(18,2))
INSERT INTO @Resultado ( Inventory_Name , Transaction_Date , DIRECTION , Transaction_Name , Transaction_Quantity , Transaction_UnitCost, Transaction_Amount, AVERAGE_UNITCOST_AT_TRANSACTION_DATE)
SELECT 'COMPUTER', '2017-01-01', 1, 'INCOMING PRODUCT; PRUCHASE', 100, 10, 100 * 10, 10
UNION ALL SELECT 'COMPUTER', '2017-01-02', 1, 'INCOMING PRODUCT; PURCHASE', 105, 11, 105 * 11, 10.51
UNION ALL SELECT 'COMPUTER', '2017-01-03', 1, 'INCOMING PRODUCT; PURCHASE', 110, 12, 110 * 12, 11.03
UNION ALL SELECT 'COMPUTER', '2017-01-04', 0, 'OUTGOING PRODUCT; SALES', -200, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-05', 0, 'OUTGOING PRODUCT; SALES', -50, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-06', 1, 'INCOMING PRODUCT; PURCHASE', 110, 10, 110 * 10, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-07', 0, 'OUTGOING PRODUCT; SALES', -20, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-08', 0, 'OUTGOING PRODUCT; SALES', -20, NULL, NULL, NULL
UNION ALL SELECT 'COMPUTER', '2017-01-09', 0, 'OUTGOING PRODUCT; SALES', -20, NULL, NULL, NULL
SELECT * FROM @Resultado
【问题讨论】:
-
我忘了说我使用的是 Microsoft SQL Server 2012 Standard
-
在测试数据方面做得很好,请将预期结果作为文本添加并解释
标签: sql-server tsql common-table-expression window-functions