Надеюсь, я понимаю структуру данных, которую вы описываете.Таблица переменных ниже - моя интерпретация.Если это правильно, то код ниже должен дать вам то, что вы ищете.
Ключевым отличием является «И» в предложении «ВКЛ» против «ГДЕ».Если вы поместите критерии в поле «ГДЕ», то вы по сути превращаете свое ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ в ВНУТРЕННЕЕ СОЕДИНЕНИЕ, утверждая, что критерии должны быть истинными после завершения соединения.В то время как в «ON» вы говорите SQL, что оно должно быть истинным, чтобы выполнить само соединение.
declare @tbl table ([year] int, [id] int, [someval] varchar(50))
insert into @tbl values (2018, 1, 'one')
insert into @tbl values (2018, 2, 'two')
insert into @tbl values (2017, 1, 'three')
insert into @tbl values (2016, 1, 'four')
insert into @tbl values (2015, 1, 'five')
insert into @tbl values (2015, 2, 'six')
insert into @tbl values (2015, 3, 'seven')
;with t2018 as(select * from @tbl where [year]=2018)
,t2017 as(select * from @tbl where [year]=2017)
,t2016 as(select * from @tbl where [year]=2016)
,t2015 as(select * from @tbl where [year]=2015)
select isnull(t2018.id,isnull(t2017.id,isnull(t2016.id,t2015.id))) as id,
t2018.someval as [2018SomeVal],
t2017.someval as [2017SomeVal],
t2016.someval as [2016SomeVal],
t2015.someval as [2015SomeVal]
from t2018
full outer join t2017 on t2017.id = t2018.id
full outer join t2016 on t2016.id = t2018.id
full outer join t2015 on t2015.id = t2018.id