2014-01-21 71 views
0

我有兩個表我試圖從SQL Server 2012中抽取數據。我將BO表中的記錄從JOIN丟棄到ItemNumber上的PO表中。我該如何解決這個問題? BO表查詢最初抽取309行,完整查詢抽取280行。我知道PO表中存在的項目不存在於BO表格中,但我仍然需要在最終結果中看到這些項目,因此我可以說它們未被記錄下來。T-SQL在SQL Server 2012的JOIN中丟失記錄

SELECT 
    a.ItemNumber, 
    a.BOQty, 
    a.TtlBO$, 
    MIN(po.PBDUE) AS PODueDate 
FROM 
    dbo.PO po 
    RIGHT JOIN 
(SELECT 
    bo.ItemNumber, 
    SUM(bo.BOQty) AS BOQty, 
    SUM(bo.ExtPrice) AS TtlBO$ 
FROM 
    dbo.BO bo 
GROUP BY 
    bo.ItemNumber 
)a 
ON a.ItemNumber = po.PBITEM 
WHERE po.PBTYPE <> 'R' 
    AND po.PASTAT <> 'X' 
GROUP BY 
    a.ItemNumber, 
    a.BOQty, 
    a.TtlBO$ 
ORDER BY 
    ItemNumber 
+1

你需要添加條件無效,例如,OR po.pbtype是空 – Jayvee

+0

這不會是po.pbtype我想。我認爲這將是po.pbitem爲null,但仍然不能捕獲我所有的遺漏物品。 – tsqln00b

回答

0

這裏是我能得到我需要的東西:

SELECT 
     a.ItemNumber, 
     a.BOQty, 
     a.TtlBO$, 
     MIN(po.PBDUE) AS PODueDate 
    FROM 
     dbo.PO po 
     RIGHT JOIN 
    (SELECT 
     bo.ItemNumber, 
     SUM(bo.BOQty) AS BOQty, 
     SUM(bo.ExtPrice) AS TtlBO$ 
    FROM 
     dbo.BO bo 
    GROUP BY 
     bo.ItemNumber 
    )a 
    ON a.ItemNumber = po.PBITEM AND po.PBTYPE <> 'R' AND po.PASTAT <> 'X' 
     OR po.PBITEM IS NULL 
    GROUP BY 
     a.ItemNumber, 
     a.BOQty, 
     a.TtlBO$ 
    ORDER BY 
     ItemNumber 
+0

是的,那是爲我添加null條件的建議;如果沒有匹配,PO中的所有列都將爲空 – Jayvee