📜  Sql server Cost Fifo查询-SQL(1)

📅  最后修改于: 2023-12-03 15:20:14.758000             🧑  作者: Mango

Sql server Cost Fifo查询

在 SQL Server 中,通过使用 FIFO(先进先出)方法可以计算成本。这种方法可以追踪成本并计算库存价值。

实现方法

将好货入库时,将其入库成本记录在一个三列表中:料号、入库日、成本。成本是加权入库单价。如果相同的料号在同一天内入库,则将其成本相加,然后将其除以总量。

在销售时,首先计算出销售成本,然后将该成本从成本表中删除或减去数量。应该用 FIFO 方法从最早的日期开始减去库存。如果其数量少于需求量,则考虑下一个日期。如果还不足,再考虑下一日期。这个过程持续到所有需求都被满足为止。

代码示例

下面是一个使用 FIFO 方法计算成本的示例:

-- 成本表
CREATE TABLE Cost
(
    PartNo VARCHAR(50) NOT NULL,
    DateIn DATE NOT NULL,
    Cost DECIMAL(18, 2) NOT NULL,
    Qty DECIMAL(18, 2) NOT NULL
)

-- 添加入库记录
INSERT INTO Cost VALUES ('Part A', '2022-01-01', 5.00, 10)
INSERT INTO Cost VALUES ('Part A', '2022-01-02', 6.50, 20)
INSERT INTO Cost VALUES ('Part A', '2022-01-03', 7.25, 15)
INSERT INTO Cost VALUES ('Part A', '2022-01-04', 8.00, 25)

-- 销售操作
DECLARE @qty DECIMAL(18, 2) = 30
DECLARE @cost DECIMAL(18, 2) = 0

WHILE @qty > 0
BEGIN
    -- 找到成本最低的记录
    SELECT TOP 1 @cost = Cost, @qtyToSell = Qty
    FROM Cost
    WHERE PartNo = 'Part A'
    ORDER BY DateIn

    -- 更新成本表
    IF @qtyToSell < @qty
    BEGIN
        DELETE Cost WHERE PartNo = 'Part A' AND DateIn = (SELECT MIN(DateIn) FROM Cost WHERE PartNo = 'Part A')
        SET @qty = @qty - @qtyToSell
        SET @cost = @cost * @qtyToSell
    END
    ELSE
    BEGIN
        UPDATE Cost SET Qty = Qty - @qty WHERE PartNo = 'Part A' AND DateIn = (SELECT MIN(DateIn) FROM Cost WHERE PartNo = 'Part A')
        SET @cost = @cost * @qty
        SET @qty = 0
    END
END

注意:在实际情况中,需要添加错误处理和事务处理来确保操作的正确执行和完整性。