如果行不存在,则为0否则为列值

时间:2016-08-14 15:55:00

标签: sql sql-server-2008

我有以下查询,每当没有行存在时我需要从数量减去0,我尝试使用是空 COALESCE 但是这不会起作用结果行不存在。我怎样才能实现它?

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。

2 个答案:

答案 0 :(得分:1)

可能该行不存在,因为where子句将left join转换为inner 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;

答案 1 :(得分: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表。