我有以下查询,每当没有行存在时我需要从数量减去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。
答案 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表。