2016-08-14 105 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中的任何批号指定结果集? –

相关问题