Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server 2005中statment时为NULL,大小写为_Sql_Sql Server 2005_Case - Fatal编程技术网

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