使用FIFO T-SQL获取商店价值

时间:2014-09-21 21:49:59

标签: sql sql-server sql-server-2008 tsql

我的表格包含了我的所有产品详细信息。我希望通过FIFO方法获得商店价值,

All Purchases

如果我的股票是3 sql给我9000,意味着(3 * 3000)

如果我的股票是5 sql给我15000,意味着(5 * 3000)

如果我的股票是6 sql给我17000,意味着(5 * 3000)+(1 * 2000)

如果我的股票是15 sql给我36000,意味着(5 * 3000)+(8 * 2000)+(2 * 2500)

提前致谢

1 个答案:

答案 0 :(得分:2)

您可以使用数字表将源数据转换为每个产品项目1行,然后将其添加:

-- generate numbers 1 to 10000
;with n as (
    select top 10000
        row_number() over(order by t1.number) as n
    from
        master..spt_values t1
            cross join
        master..spt_values t2    
), x as (
-- explode source table into one price row for each item
    select
        row_number() over (order by p.[date]) rn,
        p.price
    from
        product p
            inner join
        n
            on p.amount >= n.n
) select
    sum(price)
from
    x
where
    rn <= @stock;

这并没有发现@stock太大了。如果amount可能超过10,000,那么您需要考虑生成更多数字。

Example SQLFiddle