Начиная с вашего результирующего набора, вы можете поворачивать данные следующим образом:
declare @tmp table(CandidateId int, JobOrderReferralStageHistoryId int, JobOrderId int, HistoryDate datetime , StageName varchar(50))
insert into @tmp values
(100027026, 71591, 200005222, '2018-06-18 19:02:00', 'Applied New') ,(100027026, 71601, 200005222, '2018-06-19 08:56:00', 'Applied Existing') ,(100027026, 71603, 200005222, '2018-06-19 08:56:00', 'Telephone Screen') ,(100027026, 71607, 200005222, '2018-06-19 09:35:00', 'CV Sent to Client') ,(100027026, 71625, 200005222, '2018-06-19 10:43:00', 'Client Interview') ,(100027026, 71662, 200005222, '2018-06-19 13:11:00', 'Approved for Progression') ,(100027026, 71664, 200005222, '2018-06-19 13:11:00', 'Testing/Screening') ,(100027026, 71666, 200005222, '2018-06-19 13:11:00', 'Pre-employment Medical')
select *
from
(
select JobOrderId, CandidateId ,HistoryDate,StageName
from @tmp
) src
pivot
(
max(HistoryDate)
for StageName in ([Applied New], [Applied Existing], [Telephone Screen], [CV Sent to Client], [Client Interview], [Approved for Progression], [Testing/Screening], [Pre-employment Medical])
) piv
Результаты: