2017-06-29 13 views

答えて

2

topコマンドを削除した場合。

select top 1 case when avail <> null or avail <> '' 
     then avail else 'NotFound' end 
     from table1 
     where name = 'abc' 
     order by [datetime] desc 
0

次の2つの方法で行うことができます。

使用IF EXISTS方法:top 1 availが戻っ空の場合

IF EXISTS (SELECT TOP 1 [avail] FROM [table1] WHERE [name] = 'abc' ORDER BY [datetime] DESC) 
    SELECT TOP 1 [avail] FROM [table1] WHERE [name] = 'abc' ORDER BY [datetime] DESC 
ELSE 
    SELECT 0 AS [avail] 

または変数とプロセスにavail値を格納し、この方法で唯一のリスクがあります結果をゼロとして取得します。

DECLARE @Avail AS VARCHAR(100) = ''; -- varchar of the `avail` data size 

SELECT TOP 1 @Avail = [avail] FROM [table1] WHERE [name] = 'abc' ORDER BY [datetime] DESC; 

IF @Avail = '' 
    SELECT 0 AS [avail] 
ELSE 
    SELECT @Avail AS [avail] 
-1

これを達成するための別の方法であるあなたが 'とき...ケース' を使用して、この

SELECT ISNULL((SELECT TOP 1 
    [avail] 
    FROM [table1] 
    where [name] = 'abc' 
    order by [datetime] desc), 0) AS [avail] 
+0

table1が空の場合は動作しません。 – jarlh

0

を使用することができ、その上部1あなたが望むか

SELECT TOP 1 
    isnull([avail],'0') 
    FROM [table1] 
    where [name] = 'abc' 
    order by [datetime] desc 
+0

table1が空の場合は動作しません。 – jarlh

1

COALESCEを使用してください。非ヌル値を持つ最初の引数からデータを選択します。無駄がnullでない場合、そうでない場合は

SELECT COALESCE(avail, 'Not Found') 
FROM table1 
WHERE name = 'abc' 
ORDER BY datetime desc 

「見つかりません」を返すあなたはなぜ自分のプレゼンテーション層のそれに対処しませんか?https://docs.microsoft.com/en-us/sql/t-sql/language-elements/coalesce-transact-sql

+0

table1が空の場合は動作しません。 – jarlh

関連する問題