首页 > 解决方案 > DISTINCT 在左连接中无法正常工作

问题描述

我有两张桌子StockInStockOut.

StockIntable 有一个产品的 ID 号,这个 ID 号在StockIn表中是唯一的,否则这个 ID 号将在StockOut表中重复,因为库存将售罄。

现在我想创建一个视图来查找手头的库存 where 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

标签: sqlsql-server

解决方案


一个带有普通 SUM 的简单 GROUP BY 应该可以。

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;

推荐阅读