SQL Server选择零件,填充0无结果

时间:2019-03-08 06:38:02

标签: sql sql-server

我有下表

  • 位置(ID,locationName)
  • 库存(产品ID,数量,位置ID)

使用以下数据,我需要查询以显示每个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

到目前为止,我已经尝试了许多不同的方法,但是没有运气,因此,我们将不胜感激。

2 个答案:

答案 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获取位置和产品之间的所有可能组合。

Demo here

答案 1 :(得分:0)

选择y。,isNull(z.Quantity,0)作为数量 从 (     选择位置。,x.ProductId
    从位置,(从库存中选择不同的产品ID)作为x )作为y 左外部联接库存z ON y.Id = z.LocationId     和y.ProductId = z.ProductId