我有两张桌子
表1:(购买)
id。名称、数量、成本
表2:(出售)
id,名称,qt,出售
我买东西然后转卖。
例如,上面的表1显示:我买了20顶帽子,每顶300美元,60只手表,每只800美元,然后每只700美元(这意味着每只716.66美元)。
然后我把它们转售给上面的表2: 18顶帽子和40块手表。
所以我还有2顶帽子和10块手表
我想让人们知道我的物品有多值钱。
所以我还剩2顶帽子就意味着2* 300 =600美元
我剩下10块手表,意思是20 *716.66美元=1433.2美元。
我总共有600美元+1433.2美元=14933.2美元
我怎么能从上面的两张表格中得到(14933.2)的结果。这对我来说真的很重要,所以请帮帮忙!
发布于 2013-07-09 10:46:59
你可以这样做:
select
b.name,
@av_cost := (select sum(x0.qt*x0.cost)/sum(x0.qt) from buy x0 where x0.name=b.name) as av_cost,
@nr_buy := (select sum(x1.qt) from buy x1 where x1.name=b.name) as nr_buy,
@nr_sold := (select sum(x2.qt) from sell x2 where x2.name=b.name) as nr_sold,
@in_stock := @nr_buy - @nr_sold as in_stock,
@in_stock * @av_cost as value_in_stock
from buy b
group by 1
我相信有人可以优化这一点,但就目前而言,它是有效的。
有关工作示例,请参见Sql小提琴。
B.T.W.你在这里工作的是一个普通的模特。如果你所有的产品都售出了,而你买了一个新的,比如说500美元,那么这个数字就不是in_stock,因为过去你可能会有不同的价格。
如果这不是您想要的,您需要在“先到先出”系统中查看。在那里,你最后的20块手表将花费20*700,因为你的最后50块手表每块700块。
编辑:只有总数
如果你只想得到你能做的总数:
select sum(x.value_in_stock) as value_total
from (
select
b.name,
@av_cost := (select sum(x0.qt*x0.cost)/sum(x0.qt) from buy x0 where x0.name=b.name) as av_cost,
@nr_buy := (select sum(x1.qt) from buy x1 where x1.name=b.name) as nr_buy,
@nr_sold := (select sum(x2.qt) from sell x2 where x2.name=b.name) as nr_sold,
@in_stock := @nr_buy - @nr_sold as in_stock,
@in_stock * @av_cost as value_in_stock
from buy b
group by 1
) x
https://stackoverflow.com/questions/17545417
复制相似问题