我有两个表StockIn和StockOut,我想创建一个视图表来显示手中的库存。我能够实现,但是如果特定产品在StockIn表中输入并且没有售罄,并且在StockOut表中没有其条目,那么在我的视图表中该特定产品的现有库存显示为空。请谁能解决这个问题。
下面是我的查询:
SELECT
si.Id,
si.AId,
si.AssetsName,
si.PTypeId,
si.ProductType,
si.Rate,
si.Qty,
SUM(so.QtyOut) AS QtyOut,
COALESCE(si.Qty, 0) - SUM(so.QtyOut) AS StockInHand
FROM dbo.StockIn si
LEFT JOIN dbo.StockOut so ON so.Id = si.Id
GROUP BY
si.Id,
si.AId,
si.AssetsName,
si.PTypeId,
si.ProductType,
si.Rate,
si.Qty
;
GO
答案 0 :(得分:3)
您需要在左侧联接的右侧一侧的表中的数量上使用servaddr = EmptyStruct;
cliaddr = EmptyStruct;
:
COALESCE
这里的问题是,在连接过程中,给定的SELECT
si.Id,
si.AId,
si.AssetsName,
si.PTypeId,
si.ProductType,
si.Rate,
si.Qty,
COALESCE(SUM(so.QtyOut), 0) AS QtyOut,
si.Qty - COALESCE(SUM(so.QtyOut), 0) AS StockInHand
FROM dbo.StockIn si
LEFT JOIN dbo.StockOut so
ON so.Id = si.Id
GROUP BY
si.Id,
si.AId,
si.AssetsName,
si.PTypeId,
si.ProductType,
si.Rate,
si.Qty;
条目可能与StockIn
表中的任何内容都不匹配。在这种情况下,从逻辑上讲,您希望StockOut
丢失的数量变为零。
答案 1 :(得分:1)
您需要按以下方式处理NULL情况
isnull(SUM(so.QtyOut),0) AS QtyOut,
COALESCE(si.Qty, 0) - isnull(SUM(so.QtyOut),0) AS StockInHand
在算术运算中,如果一侧为NULL,则结果变为NULL
因此,如上所述,将这些NULL值设置为ZERO