Следующий 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
Возможно, 'vb.tname' никогда не является нулевым, когда вы получаете данные? Может быть, вы хотели сделать «левое соединение» вместо того, чтобы получать все данные из vwbooks, даже если в комнате нет соответствующих данных? Не видя некоторых исходных данных образца вместе с фактическими и ожидаемыми результатами, трудно сказать, что может быть неправильным. – jpw
@jpw прав, вы возвращаете 0 строк. Вы интерпретируете их как null. Вам нужно понять, почему ничего не возвращается. P, coalesce будет работать, когда он получит строку! – Mike
Пятно на. Спасибо. – user761758