Thanks to Pavel Vorontsov.
the Answer is:
select a.id
,a.card_id
,week(a.activity_date,1)
,dayofweek(a.activity_date)
,a.activity_date
,sec_to_time(sum(time_to_sec(case when b.activity = 0 then b.activity_duration end))) AS rest_time
,sec_to_time(sum(time_to_sec(case when b.activity = 1 then b.activity_duration end))) AS standby_time
,sec_to_time(sum(time_to_sec(case when b.activity = 2 then b.activity_duration end))) AS work_time
,sec_to_time(sum(time_to_sec(case when b.activity = 3 then b.activity_duration end))) AS drive_time
,a.day_distance
from activities a inner join v_activity_info b on a.id = b.activity_id
group by a.id
,a.card_id
,week(a.activity_date,1)
,dayofweek(a.activity_date)
,a.activity_date
,a.day_distance;