我遇到了许多类似的问题,但没有预期的结果。
我有两张桌子:
表Listings
:
SKU(int) EAN(int)
1 923983737483
2 998379847983
3 978979879080
表Stock
SKU(int) qtyInHand(int)
1 4
2 NULL
3 2
我希望根据以下条件获取SKU,EAN和qtyInHand列表
示例:
Select
Listings.SKU, Listings.EAN,
IF (Stock.qtyInHand is null or stock.qtyInHand < 2) then 0 AS Stock
我使用了以下查询,但它仍然在stock字段下列出了空值。
SELECT
CASE
WHEN (dbo.Stock.qtyInHand IS NULL) OR (dbo.Stock.qtyInHand < 2)
THEN 0
END AS Stock,
dbo.Listings.SKU, dbo.Listings.EAN
FROM
dbo.Listings
LEFT OUTER JOIN
dbo.Stock ON dbo.Listings.SKU = dbo.Stock.SKU
答案 0 :(得分:2)
试试这个,Isnull()函数
SELECT
CASE WHEN (Isnull(dbo.Stock.qtyInHand,0) < 2)
THEN 0
Else dbo.Stock.qtyInHand
END AS Stock
, dbo.Listings.SKU
, dbo.Listings.ASIN
FROM dbo.Listings
LEFT OUTER JOIN dbo.Stock ON dbo.Listings.SKU = dbo.Stock.SKU
答案 1 :(得分:0)
您的CASE
语句不包含ELSE
,以涵盖qtyInHand
不为NULL或大于或等于2的情况。如MSDN中所述,只要CASE
表达式都不为真,WHEN
语句的计算结果就为NULL。