2016-07-07 8 views
0

私は一緒に結合した複数のテーブルのクエリで合計の列 "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 
+0

'合体(合計(列)、0)'。 – jarlh

+0

これを試しても機能しません。 – user6559135

答えて

0

私はこの問題は、あなたがINNER(つまり、あなたはカンマを使用して、古い結合構文を使用している)に登録しよ行っている_Material_Location_テーブルから値を合計していることだと思います。 LEFT OUTERにその問題を解決する必要があり、JOINことを変更

: - 暗黙の古いスタイルを混合して、新しい明示的な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 

注意は、一般的に悪い考えです。異なるタイプの結合の間の優先順位の違いに起因する奇妙な問題が存在する可能性があります。

+0

これも機能しません。 – user6559135

+0

@ user6559135 - テーブルを宣言し、問題を再現するのに十分なサンプルデータを投稿できますか?解決策を見つけるチャンスがあります。 – Kickstart

+0

キックスタート、意味が分かりませんか?申し訳ありませんが、非常に長い間コーディングされていません。私が欲しい部品番号( 'xxxxx'、 'xxxxx')を選んでいますが、最初の部品番号が表示されますが、2番目の部品番号はゼロの数量が「Material_Location.On_Hand_Qty」という列に表示されていません。 – user6559135

関連する問題