2017-08-08 133 views
1

我试图在SQL Server中返回一个值为IS NULL的字符串结果。SQL Server:Subselect IS NULL NULL'VALUE'

我正在做的一个例子如下。这是一个子选择查询...

SELECT 
    stockitems.code AS StockCode, 
    stockitems.description AS 
ShortDescription, 
    (SELECT 
     CASE remaining 
      WHEN NULL 
       THEN 'NO LEVEL' 
      ELSE remaining 
     END 
    FROM StockItemAlertLevels 
    WHERE StockItems.ID = StockItemAlertLevels.StockItemID) AS RemainingLevel 
FROM 
    stockitems 
WHERE 
    StockItems.Attribute1 = '1' 
ORDER BY 
    StockItems.Code 

不管我做什么,我不能让子选择的输出结果改变,如果结果是NULL。并非所有SELECT语句返回的结果都会返回结果,这是我需要将输出设置为“NO LEVEL”的地方。子选择将永远不会返回多个结果。

希望这是有道理的。

+0

你接近 - 你需要在剩下的为null,则写的'CASE ...' –

回答

0

我想你想要COALESCE()

SELECT si.code As StockCode, si.description AS ShortDescription, 
     (SELECT COALESCE(remaining, 'NO LEVEL')  
     FROM StockItemAlertLevels sal 
     WHERE si.ID = sal.StockItemID 
     ) as RemainingLevel 
FROM stockitems si 
WHERE si.Attribute1 = '1' 
ORDER BY si.Code; 

我怀疑,虽然,你的问题不在于remainingNULL,但没有匹配。您可以移动COALESCE()子查询外,但我会提出一个LEFT JOIN

SELECT si.code As StockCode, si.description AS ShortDescription, 
     COALESCE(remaining, 'NO LEVEL') as RemainingLevel 
FROM stockitems si LEFT JOIN 
    StockItemAlertLevels sal 
    ON si.ID = sal.StockItemID 
WHERE si.Attribute1 = '1' 
ORDER BY si.Code;