2016-07-22 3 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

Это может происходить потому, что ничего плюс null это null.

Попробуйте это:

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 имеет OpeiningBalance из 10 и ReceivedQuantity из 10 сумма может быть 20, но запрос возвращает 10 в результате, возможно, один из этих столбцов возвращает null? – Ayman

Смежные вопросы