Thanks Luis. Appreciate that tip. Will do.
I also found I could get the same result doing this. Not sure which is best, could cause an anomaly, or if it makes a difference
I moved the additional column into the middle (Aggregated?):
SELECT
JobNo,
MAX(CASE WHEN MileStoneName = 'A' THEN ForecastDate END) AS MilestoneA_Fcst,
MAX(CASE WHEN MileStoneName = 'A' THEN ActualDate END) AS MilestoneA_Act,
MAX(CASE WHEN MileStoneName = 'B' THEN ForecastDate END) AS MilestoneB_Fcst,
MAX(CASE WHEN MileStoneName = 'B' THEN ActualDate END) AS MilestoneB_Act,
MAX(CASE WHEN MileStoneName = 'C' THEN ForecastDate END) AS MilestoneC_Fcst,
MAX(CASE WHEN MileStoneName = 'C' THEN ActualDate END) AS MilestoneC_Act,
MAX(status) as status
FROM Milestonetable
LEFT OUTER JOIN
secondarytable ON Milestonetable.JobNo = secondarytable.JobNo2
GROUP BY JobNo;