我的表格包含了我的所有产品详细信息。我希望通过FIFO方法获得商店价值,
如果我的股票是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)
提前致谢
答案 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,那么您需要考虑生成更多数字。