2016-08-14 67 views
0

我有以下查詢,每當有沒有行目前我需要減去數量0,我試着用爲空COALESCE但是這不會工作,如果造成行不存在。我怎樣才能實現它?SQL如果行不存在0,否則,列值

SELECT 
    A.Quantity - ISNULL((CASE WHEN B.QuantityOrdered > 0 
           THEN B.QuantityOrdered 
           ELSE 0 END), 0) AS QTY 
FROM 
    TABLE1 A 
LEFT JOIN 
    Item ON ITEM.ID = A.ItemId 
LEFT JOIN 
    [TABLE2] B ON ITEM.ID = B.ITEMID 
WHERE 
    (Item.ItemLookupCode + '-' + A.LotNumber) = '200001-4H71582A'; 

select * FROM TABLE2 WHERE ItemLookupCode='200001-4H71582A'是一個空的結果有時,如果沒有價值,我需要分配0

+1

請提供樣本數據和期望的結果。 –

回答

1

也許是因爲where子句將在left joininner join該行不存在。這可以通過條件移動到on條款是固定的:

SELECT (A.Quantity - 
     (CASE WHEN B.QuantityOrdered > 0 THEN B.QuantityOrdered ELSE 0 END) 
     ) AS QTY 
FROM TABLE1 A LEFT JOIN 
    Item i 
    ON i.ID = A.ItemId AND 
     (i.ItemLookupCode + '-' + A.LotNumber) = '200001-4H71582A' LEFT JOIN 
    [TABLE2] B 
    ON i.ID = B.ITEMID; 
0

如果你想篩選基於項目的結果集查找代碼,以及更新的數量,使用下面的查詢:

SELECT A.Quantity - (CASE WHEN ISNULL(B.QuantityOrdered,0) > 0 
          THEN B.QuantityOrdered 
          ELSE 0 END) AS QTY 
FROM TABLE1 A 
LEFT JOIN Item ON ITEM.ID = A.ItemId 
LEFT JOIN [TABLE2] B ON ITEM.ID = B.ITEMID 
WHERE (ISNULL(Item.ItemLookupCode,'') + '-' + A.LotNumber) = '200001-4H71582A'; 

確保您正在使用的'itemlookupcode'在表格ITEM中。

+0

問題是我們搜索的itemlookupcode在大多數情況下都不會在數據庫中可用。如果itemlookupcode引用不存在,我需要將CASE結果賦值爲0。 –

+0

您能否提供一些更多的輸入信息..您是否希望針對表1中的所有記錄設置結果集,或者針對表1中的任何批號指定結果集? –

相關問題