Можно использовать row_number()
и условное агрегирование:
select id_emp, name, convert(date, date),
convert(time, max(case when seqnum = 1 then date end)) as timein1,
convert(time, max(case when seqnum = 2 then date end)) as timein2,
convert(time, max(case when seqnum = 3 then date end)) as timein3,
convert(time, max(case when seqnum = 4 then date end)) as timein4
from (select t.*,
row_number() over (partition by id_emp, convert(date, date) order by date) as seqnum
from t
) t
group by id_emp, name, convert(date, date);