mysql - 多表查询中总和列显示零值

标签 mysql sql

在我连接在一起的多个表的查询中有一个求和列“Sum(Material_Location.On_Hand_Qty)Stock”。但是,如果没有库存或数量为零,则查询中不会显示任何行或数据。我怎样才能让行或数据显示为零现有数量?卡住了,请帮忙。

SELECT (Material_Location.Material) Part, Material.Description,
    SUM(Material_Location.On_Hand_Qty) Stock,  
    (Material.Order_Point)MinTarget, (Material.Stocked_UofM)Unit, 
    (Job.In_Production_Quantity)InProductionQty,
    Material.Class, (SO_Detail.Order_Qty)OnOrderQty
FROM PRODUCTION.dbo.Material Material,
     PRODUCTION.dbo.Material_Location Material_Location
LEFT JOIN (SELECT Job.Part_Number, Sum(In_Production_Quantity) In_Production_Quantity 
          FROM PRODUCTION.dbo.Job Job 
          Where Job.Status = 'Active' 
          Group by Job.Part_Number
          )Job on Job.Part_Number = Material_Location.Material
LEFT JOIN (SELECT SO_Detail.Material, Sum(Order_Qty) Order_Qty 
           FROM PRODUCTION.dbo.SO_Detail SO_Detail 
           Where SO_Detail.Status = 'Open' 
           Group by SO_Detail.Material
          )SO_Detail on SO_Detail.Material = Material_Location.Material
WHERE Material.Material = Material_Location.Material 
      AND Material.Material In ('xxxxxx', 'xxxxx')
GROUP BY Material_Location.Material, Material.Description, 
         Material.Order_Point, Material.Stocked_UofM, 
         Job.In_Production_Quantity, Material.Class, 
         SO_Detail.Order_Qty

最佳答案

我认为问题在于您正在对正在执行 INNER JOIN 的 _Material_Location_ 表中的值求和(即,您使用了使用逗号的旧连接语法)。

将其更改为 LEFT OUTER JOIN 应该可以解决该问题:-

SELECT Material_Location.Material AS Part, 
        Material.Description,
        Material.Order_Point AS MinTarget, 
        Material.Stocked_UofM AS Unit, 
        Job.In_Production_Quantity AS InProductionQty,
        Material.Class, 
        SO_Detail.Order_Qty AS OnOrderQty,
        SUM(Material_Location.On_Hand_Qty AS Stock
FROM PRODUCTION.dbo.Material Material
LEFT OUTER JOIN PRODUCTION.dbo.Material_Location Material_Location ON Material.Material = Material_Location.Material 
LEFT OUTER JOIN 
(
    SELECT Job.Part_Number, 
            Sum(In_Production_Quantity) In_Production_Quantity 
    FROM PRODUCTION.dbo.Job Job 
    WHERE Job.Status = 'Active' 
    GROUP BY Job.Part_Number
)Job ON Job.Part_Number = Material_Location.Material
LEFT OUTER JOIN 
(
    SELECT SO_Detail.Material, 
            SUM(Order_Qty) Order_Qty 
    FROM PRODUCTION.dbo.SO_Detail SO_Detail 
    WHERE SO_Detail.Status = 'Open' 
    GROUP BY SO_Detail.Material
)SO_Detail on SO_Detail.Material = Material_Location.Material
WHERE Material.Material In ('xxxxxx', 'xxxxx')
GROUP BY Material_Location.Material, 
        Material.Description, 
        Material.Order_Point, 
        Material.Stocked_UofM, 
        Job.In_Production_Quantity, 
        Material.Class, 
        SO_Detail.Order_Qty

请注意,将旧式隐式连接语法与较新的显式连接语法混合通常是一个坏主意。不同类型的连接之间的优先级差异可能会导致奇怪的问题。

关于mysql - 多表查询中总和列显示零值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38238205/

相关文章:

mysql - 为什么这个查询没有抓取正确的记录?

mysql - SQL 计数给出 1 1 而不是 2

SQL:如何为每天的每个组选择最大值?

sql - COALESCE 如果表中不存在任何行

PHP MySQL 登录表单不起作用

php - 通过多个字段按名称搜索

mysql - 我如何在数据库查询中使用 'OR'

php - 可能的 SQL 注入(inject)会删除带有存储过程的表?

sql - 内部连接顺序和位置对性能有影响吗

php - 更新数据库当前字段