我有两个表StockIn
和StockOut
。
StockIn
表具有该产品的ID号,此ID号在StockIn
表中是唯一的,否则该ID号将在StockOut
表中重复多次,库存将售罄。
现在,我想创建一个视图来查找手中StockIn.Id
= StockOut.Id
的股票。到目前为止,我设法进行查询,并且给出了结果,但是当同一产品的StockOut
表中有多个订单时,由于ID号重复,因此失败。
下面是我的查询:
select DISTINCT
i.Id,
i.AssetsName,
i.Rate,
i.Qty,
So.QtyOut,
Balance = sum( COALESCE(i.Qty,0)- COALESCE(so.QtyOut,0)) OVER(PARTITION BY i.id)
from dbo.StockIn i
LEFT Join StockOut So
on i.Id = So.Id
GO
答案 0 :(得分:1)
具有常规SUM的简单GROUP BY应该可以。
<svgicon name="icon" :original="true" />
答案 1 :(得分:0)
在加入股票之前,最好将股票分拆为单行
删除不重复项-它无用且不需要
select
id,
si.qtyin - so.qtyout as balance
from
stockin si
left join
(select id, sum (qtyout) as qtyout from stockout group by id) so
on so.id = si.id
这意味着您的加入将永远只有1:0(如果没有销售)或1:1(所有销售在加入前加总)
订购更多东西会怎样?如果您创建另一个具有相同ID的库存记录,那么对于已重新库存的产品,也会发生相同的问题。加入之前,请使用相同的技术将stockin折叠为一行:
select
id,
si.qtyin - so.qtyout as balance
from
(Select id, sum(qtyin) as qtyin stockin group by id) si
left join
(select id, sum (qtyout) as qtyout from stockout group by id) so
on so.id = si.id
答案 2 :(得分:0)
尝试
select
i.Id,
i.AssetsName,
i.Rate,
i.Qty,
sum( COALESCE(i.Qty,0)- COALESCE((Select Qtyout from StockIn Where StockIn.Id=StockOut.Id),0)) OVER(PARTITION BY i.id) as Balance
from dbo.StockIn i
group by Id,AssetsName,Rate,Qty