使用FIFO T-SQL获取存储值
我有一个包含我所有产品详细信息的表。我想通过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使用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
提前感谢您可以使用数字表将每个产品项的源数据转换为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个产品执行此查询