2016-06-14 5 views
0

Следующий sql возвращает правильные данные, отформатированные по мере необходимости, за исключением случаев, когда данные не возвращаются.Sql Server 2008 coalesce

Желаемый результат - при использовании coalesce on ename - должен возвращать 'none', когда данные не возвращаются.

Что я делаю неправильно на объединении? Почему он не возвращает «нет», когда данные не возвращаются?

Когда данные не возвращаются, мы получаем все имена столбцов, и все они равны нулю.

все указатели и предложения оценены.

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' никогда не является нулевым, когда вы получаете данные? Может быть, вы хотели сделать «левое соединение» вместо того, чтобы получать все данные из vwbooks, даже если в комнате нет соответствующих данных? Не видя некоторых исходных данных образца вместе с фактическими и ожидаемыми результатами, трудно сказать, что может быть неправильным. – jpw

+0

@jpw прав, вы возвращаете 0 строк. Вы интерпретируете их как null. Вам нужно понять, почему ничего не возвращается. P, coalesce будет работать, когда он получит строку! – Mike

+0

Пятно на. Спасибо. – user761758

ответ

0

Вы возвращаете 0 строк. Вы интерпретируете их как null. Вам нужно понять, почему ничего не возвращается. Объединение будет работать, когда он получит ряд!