我有下表
使用以下数据,我需要查询以显示每个productid的所有位置,即使不在库存表中也是如此。下面的记录示例。
表Location
Id Location Name
--------------------
1 Plant
2 Warehouse
3 Container
表Inventory
:
Productid Qty Locationid
-----------------------------
45 30 1
45 56 2
3 15 1
3 50 3
15 25 3
查询所需的结果:
Productid Qty LocationName
---------------------------------
45 30 Plant
45 56 Warehouse
45 0 Container
3 15 Plant
3 0 Warehouse
3 50 Container
15 0 Plant
15 0 Warehouse
15 25 Container
到目前为止,我已经尝试了许多不同的方法,但是没有运气,因此,我们将不胜感激。
答案 0 :(得分:7)
您可以使用以下查询:
SELECT p.ProductId,
COALESCE(qty,0) AS qty,
[Location Name]
FROM LOCATION l
CROSS JOIN (SELECT DISTINCT ProductId FROM Inventory) AS p
LEFT JOIN Inventory i ON l.Id = i.locationid AND p.Productid = i.Productid
ORDER BY Productid, [Location Name]
查询使用CROSS JOIN
获取位置和产品之间的所有可能组合。
答案 1 :(得分:0)
选择y。,isNull(z.Quantity,0)作为数量
从
(
选择位置。,x.ProductId
从位置,(从库存中选择不同的产品ID)作为x
)作为y
左外部联接库存z ON y.Id = z.LocationId
和y.ProductId = z.ProductId