Sql DISTINCT在左联接中工作不正常
我有两张进货和缺货的桌子 库存表中有产品的Id号,此Id号在库存表中是唯一的,否则此Id号将在库存售罄时在库存表中重复 现在我想创建一个视图来查找库存,其中StockIn.Id=StockOut.Id。到目前为止,我设法进行了查询,它给出了结果,但当同一产品的缺货表中有多个订单时,由于Id号重复,查询失败 以下是我的疑问:Sql DISTINCT在左联接中工作不正常,sql,sql-server,Sql,Sql Server,我有两张进货和缺货的桌子 库存表中有产品的Id号,此Id号在库存表中是唯一的,否则此Id号将在库存售罄时在库存表中重复 现在我想创建一个视图来查找库存,其中StockIn.Id=StockOut.Id。到目前为止,我设法进行了查询,它给出了结果,但当同一产品的缺货表中有多个订单时,由于Id号重复,查询失败 以下是我的疑问: select DISTINCT i.Id, i.AssetsName, i.Rate, i.Qty, So.QtyOut, Balance
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
你最好在加入之前把你的股票分成一行 删除distinct-它没有帮助,也不需要
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的库存记录,那么对于重新库存的产品,同样的问题也会发生。在加入之前,使用相同的技术将库存折叠到一行:
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
试试这个
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
一个简单的组,由正常和的应该做
SELECT
si.Id,
si.AssetsName,
si.Rate,
si.Qty,
SUM(so.QtyOut) AS QtyOut,
COALESCE(si.Qty, 0) - SUM(so.QtyOut) AS Balance
FROM dbo.StockIn si
LEFT JOIN dbo.StockOut so ON so.Id = si.Id
GROUP BY si.Id, si.AssetsName, si.Rate, si.Qty;
请提供您的预期输出示例查询和数据,请使用预期输出组,因为它已使其唯一。如果有一组风暴,不需要区分,就像一个魅力如此完美。