ISNULL与SQL Server 2005中的CASE WHEN语句

时间:2014-03-20 05:56:48

标签: sql sql-server-2005 case

我遇到了许多类似的问题,但没有预期的结果。

我有两张桌子:

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

2 个答案:

答案 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。