您好我有两个表(库存和销售)。
我正在尝试获取SKU在给定日期范围内的总销售额的库存的当前视图,其中两个表中都有SKU。即使在日期范围内没有销售,我也希望退回SKU(如果它在where子句中不存在)。
我试过使用"之间" date where子句,但只返回本周销售的SKU。我还想包括本周未售出的SKU,它们应该有0个Sales $和Qty Ordered值。
我尝试过使用EXIST条款,但没有成功。
这是我的问题:
SELECT Inventory.SKU, Sum([Sales].[Sales $]), Inventory.Qty, Sum([Sales].Qty Ordered)
FROM Inventory LEFT JOIN Sales ON Inventory.SKU = [Sales].[Style Id]
WHERE ((([Sales].[Order date]) Between #5/14/2016# And #5/22/2016#))
GROUP BY Inventory.SKU, Inventory.Qty;
答案 0 :(得分:3)
外连接表的标准属于ON子句:
SELECT
Inventory.SKU,
Sum(Sales.[Sales $]),
Inventory.Qty,
Sum(Sales.[Qty Ordered])
FROM (Inventory
LEFT JOIN Sales ON Inventory.SKU = Sales.[Style Id]
AND Sales.[Order date] Between #5/14/2016# And #5/22/2016#)
GROUP BY Inventory.SKU, Inventory.Qty;
原因是外连接意味着在没有记录匹配的情况下连接填充了NULL的虚拟记录。但是如果列为NULL,则WHERE
条件对于这些记录永远不会成立,并且您就可以使用简单的INNER JOIN
。
答案 1 :(得分:1)
您所要做的就是将where子句的内容移动到on子句:
SELECT Inventory.SKU, Sum([Sales].[Sales $]), Inventory.Qty, Sum([Sales].Qty Ordered)
FROM Inventory
LEFT JOIN Sales ON ((Inventory.SKU = [Sales].[Style Id])
AND (([Sales].[Order date] Between #5/14/2016# And #5/22/2016#)))
GROUP BY Inventory.SKU, Inventory.Qty;