Попробуйте: это более динамично:
create table #tr(dates datetime,id int,salary int)
insert into #tr values('01/01/2012' , 001 , 1500)
insert into #tr values('01/01/2011' ,001, 750)
insert into #tr values('01/01/2010' , 001 , 500)
insert into #tr values('01/01/2011' ,002, 750)
insert into #tr values('01/01/2010' , 002 , 500)
with T as (
select ID, dates incDate, Salary, ROW_NUMBER() over( partition by id order by id, Dates) AS rn from #tr)
select T.id,T1.salary ,T.incdate,(T1.Salary-T.salary)*100/T.Salary as PercHike from T join T T1 on T.id=T1.id and T.rn=(T1.rn-1)
UNION
select id,min(Salary) as Salary ,min(dates) as Incdate , 0 as PercHike from #tr group by Id
ORDER BY ID , incDate
drop table #tr
В сценарии, где Id отличаются, ранее предложенное решение выполняет.