2017-08-08 61 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;