declare @t table(num varchar(10),name varchar(10),work_start datetime,travel_start datetime,train_num int)
insert into @t select '0002','明天','2005-12-20','2005-12-20',112
insert into @t select '0002','明天','2005-12-22','2005-12-23',111
insert into @t select '0002','明天','2005-12-26','2005-12-27',33select
    num,name,
    [20日]=max(case day(work_start) when 20 then rtrim(train_num) end),
    [22日]=max(case day(work_start) when 22 then rtrim(train_num) end),
    [26日]=max(case day(work_start) when 26 then rtrim(train_num) end)
from
    @t
group by
    num,name
union
select
    num,name,
    [20日]=max(case day(work_start) when 20 then convert(char(10),work_start,120) end),
    [22日]=max(case day(work_start) when 22 then convert(char(10),work_start,120) end),
    [26日]=max(case day(work_start) when 26 then convert(char(10),work_start,120) end)
from
    @t
group by
    num,name
union
select
    num,name,
    [20日]=max(case day(work_start) when 20 then convert(char(10),travel_start,120) end),
    [22日]=max(case day(work_start) when 22 then convert(char(10),travel_start,120) end),
    [26日]=max(case day(work_start) when 26 then convert(char(10),travel_start,120) end)
from
    @t
group by
    num,name/*
num        name       20日          22日          26日          
---------- ---------- ------------ ------------ ------------ 
0002       明天         112          111          33
0002       明天         2005-12-20   2005-12-22   2005-12-26
0002       明天         2005-12-20   2005-12-23   2005-12-27
*/