2016-07-22 45 views
1

如何從下面的模式中獲得特定商店中的某個項目餘額?使用SQL獲取項目當前餘額

item balance = ItemOpeningBalances.OpeiningBalance + PurchaseOrderDetails.ReceivedQuantity 

我曾嘗試使用下面的查詢來獲得平衡,但它給了我null值平衡

查詢

SELECT 
    i.ItemID, 
    s.StoreID, 
    SUM(iob.OpeiningBalance + pod.ReceivedQuantity) AS balance 
FROM 
    dbo.StoreDetails st 
LEFT JOIN 
    Stores s ON st.StoreID = s.StoreID 
LEFT JOIN 
    PurchaseOrders po ON st.PurchaseOrderID = po.PurchaseOrderID 
LEFT JOIN 
    PurchaseOrderDetails pod ON po.PurchaseOrderID = pod.PurchaseOrderID 
LEFT JOIN 
    Items i ON pod.ItemID = i.ItemID 
LEFT JOIN 
    ItemOpeningBalances iob ON st.OpeiningBalanceID = iob.OpeiningBalanceID 
          AND i.ItemID = iob.ItemID 
WHERE 
    (i.ItemID = 1) 
    AND (s.StoreID = 1) 
GROUP BY 
    i.ItemID, s.StoreID 

輸出

ItemID StoreID balance 
1  1  Null 

模式

enter image description here

+0

而不是你的表的圖片,如果你在消耗格式發佈DDL和樣本數據會更好的。本文做了很大的解釋如何做到這一點。 http://spaghettidba.com/2015/04/24/how-to-post-at-sql-question-on-a-public-forum/ –

回答

1

這種狀況可能是因爲任何加nullnull

試試這個:

SELECT 
    i.ItemID, 
    s.StoreID, 
    SUM(COALESCE(iob.OpeiningBalance,0) + COALESCE(pod.ReceivedQuantity,0) AS balance 
FROM dbo.StoreDetails st 
LEFT JOIN Stores s 
    ON st.StoreID = s.StoreID 
LEFT JOIN PurchaseOrders po 
    ON st.PurchaseOrderID = po.PurchaseOrderID 
LEFT JOIN PurchaseOrderDetails pod 
    ON po.PurchaseOrderID = pod.PurchaseOrderID 
LEFT JOIN Items i 
    ON pod.ItemID = i.ItemID 
LEFT JOIN ItemOpeningBalances iob 
    ON st.OpeiningBalanceID = iob.OpeiningBalanceID 
    AND i.ItemID = iob.ItemID 
WHERE (i.ItemID = 1) 
AND (s.StoreID = 1) 
GROUP BY i.ItemID, 
     s.StoreID 
+0

謝謝但查詢不給總和 – Ayman

+0

@Ayman也許你可以解釋問題所在。只是說它不給這筆錢並不是很有幫助。 –

+0

項目1的OpeningBalance爲10並且ReceivedQuantity爲10,總和應該爲20,但是查詢返回10作爲結果,可能這些列中的一個返回null? – Ayman