Результат, который вы показали в своем вопросе, может быть достигнут более эффективно с помощью запроса ниже:
create temporary table max_activity
select observation,max(activity) from employee_proc group by 1;
select employee,
activity,
MAX(IF(observation = 10, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs10,
MAX(IF(observation = 20, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs20,
MAX(IF(observation = 30, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs30,
MAX(IF(observation = 40, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs40,
MAX(IF(observation = 50, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs50,
MAX(IF(observation = 60, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs60,
MAX(IF(observation = 70, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs70,
MAX(IF(observation = 80, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs80,
MAX(IF(observation = 90, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs90,
MAX(IF(observation = 100, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs100,
MAX(IF(observation = 110, ifnull(TEXT_,ifnull(date_in,ifnull(number,dropdown))),NULL)) AS Obs110
from employee_proc
inner join max_activity
on employee_proc.activity = max_activity.activity
group by 1,2;