SQL Server 2005中statment时为NULL,大小写为
我已经经历了许多类似的问题,但没有预期的结果 我有两张桌子: 表SQL Server 2005中statment时为NULL,大小写为,sql,sql-server-2005,case,Sql,Sql Server 2005,Case,我已经经历了许多类似的问题,但没有预期的结果 我有两张桌子: 表列表: SKU(int) EAN(int) 1 923983737483 2 998379847983 3 978979879080 表库存 SKU(int) qtyInHand(int) 1 4 2 NULL 3 2 我想根据以下
列表
:
SKU(int) EAN(int)
1 923983737483
2 998379847983
3 978979879080
表库存
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
选择
Listings.SKU、Listings.EAN、,
如果(Stock.qtyHand为null或Stock.qtyHand<2),则0为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
选择
案例
当(dbo.Stock.qtyHand为空)或(dbo.Stock.qtyHand<2)时
然后0
以库存结束,
dbo.Listings.SKU,dbo.Listings.EAN
从…起
dbo.Listings
左外连接
dbo.Listings.SKU=dbo.Stock.SKU上的dbo.Stock
试试这个,Isnull()函数
选择
(Isnull(dbo.Stock.qtyHand,0)<2)时的大小写
然后0
Else dbo.Stock.qtyInHand
以库存结束
,dbo.Listings.SKU
,dbo.Listings.ASIN
来自dbo.Listings
dbo.Listings.SKU=dbo.Stock.SKU上的左外部联接dbo.Stock
您的CASE
语句不包含ELSE
以涵盖qtyHand
不为空或大于或等于2的情况。如中所述,每当WHEN
表达式均为true时,CASE
语句的计算结果为NULL。查询对我有效。它列出了qtyHand为null或小于2的0,还列出了大于2的所有值。你能实际证明你的陈述吗?@AK47的代码确实包括ELSE
;但是,原始查询选择CASE WHEN(dbo.Stock.qtyHand为NULL)或(dbo.Stock.qtyHand<2)然后0结束为Stock、dbo.Listings.SKU、dbo.Listings.EAN FROM dbo.Listings LEFT OUTER JOIN dbo.Stock ON dbo.Listings.SKU=dbo.Stock.SKU
没有(这就是为什么会得到NULL)。
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