Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用FIFO T-SQL获取存储值_Sql_Sql Server_Sql Server 2008_Tsql - Fatal编程技术网

使用FIFO T-SQL获取存储值

使用FIFO T-SQL获取存储值,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我有一个包含我所有产品详细信息的表。我想通过FIFO方法得到存储值 如果我的库存是3,给我9000,意味着3*3000 如果我的库存是5 sql,给我15000,意味着5*3000 如果我的股票是6SQL,给我17000,意味着5*3000+1*2000 如果我的股票是15 sql,给我36000,意味着5*3000+8*2000+2*2500 提前感谢您可以使用数字表将每个产品项的源数据转换为1行,然后将它们相加: -- generate numbers 1 to 10000 ;with n

我有一个包含我所有产品详细信息的表。我想通过FIFO方法得到存储值

如果我的库存是3,给我9000,意味着3*3000

如果我的库存是5 sql,给我15000,意味着5*3000

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

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


提前感谢

您可以使用数字表将每个产品项的源数据转换为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太大。如果数量大于10000,则需要考虑生成更多的数字


您使用的是哪个版本的SQL Server?另外,请删除MySQL标签。我更新了标签。可能的重复太慢了,我正在寻找更好的算法。这是一篇好文章:有没有简单的方法?因为我的源表包含5000行,我需要对12000个产品执行此查询