2016-06-14 20 views
0

次のsqlは、データが返されない場合を除いて、必要に応じて正しい形式のデータを返します。Sql Server 2008 coalesce

希望の結果 - ename_ で合体を使用すると、データが返されないときに 'none'が返されます。

私は合体で間違っていますか?データが返されないときに「none」を返さないのはなぜですか?

データが返されない場合、すべての列名が取得され、すべてがnullです。

すべての指針と提案が高く評価されています。

select 
     ltrim(right(convert(varchar(20), tstart, 100), 7)) 
     as 'START TIME', 
     ltrim(right(convert(varchar(20), tend, 100), 7)) 
     as 'END TIME', 
    coalesce(vb.tname, 'none') as TITLE, 
     tr.description as LOCATION 
from vwbooks vb 
join troom tr 
    on vb.room = tr.id 
where vb.room in(select id 
        from tblroom 
        where building = 4971 
    and vb.tstart >= floor(cast(getdate() as float)) 
    and vb.tstart < ceiling(cast(getdate() as float)) 
    and datepart(hour, vb.tstart) between 6 and 18 
+1

データを取得したときに 'vb.tname'がnullになることはありませんか?たぶん、あなたはtwroomに一致するデータがないのにvwbooksからすべてのデータを取得する代わりに 'left join'を行うつもりでしたか?実際の結果と予想される結果とともにいくつかのサンプル入力データを見ることなく、何が間違っているのかは分かりません。 – jpw

+0

@jpwが正しく、0行を返しています。これらをnullと解釈しています。何も返されない理由を理解する必要があります。 Pは、合体は行を取得したときに動作します! – Mike

+0

スポットがあります。ありがとうございました。 – user761758

答えて

0

0行を返します。これらをnullと解釈しています。何も返されない理由を理解する必要があります。合体は、それが行を取得するときに動作します!