2017-08-08 8 views
1

SQL Serverの値IS NULLを返したときに文字列結果を返そうとしています。SQL Server:Subselect where is NULL THEN '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ステートメントから返されたすべての結果が副選択で結果を返すわけではありません。これは出力を「レベルなし」に設定する必要があります。副選択は、複数の結果を返すことはありません。

希望はこれが理にかなっています。

+0

あなたが近くにいる - あなたは残りのTHEN 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; 
関連する問題