请熟悉SQL的进来帮帮手
有一个查询出来的列表结果是 
 DateName      Span                              Weeks            WorkStatusName 
 时间段一      08:00-08:30         长周一            在岗 
 时间段二      08:30-09:30         长周一            修息 
 时间段三      09:00-09:30         长周一            在岗 
 时间段四      09:00-10:30         长周一            在岗 
 时间段二      08:00-08:30         短周一            在岗 
 时间段二      08:00-08:30         短周一            修息 
 时间段三      08:00-08:30         短周一            在岗 
 .. 
 想排成这样的格式   
 名称                  时间段                  长周一   短周一      ... 
 时间段一   08:00-08:30      在岗         在岗 
 时间段二   08:30-09:30      修息         在岗 
 时间段三   09:00-09:30      在岗         在岗 
 时间段四   09:00-10:30      在岗     
 .. 
 谢谢   
------解决方案--------------------  Declare @S Nvarchar(4000) 
 Select @S = N 'Select [DateName] As 名称, Span As 时间段 ' 
 Select @S = @S + N ', Max(Case Weeks When N ' ' ' + Weeks +  ' ' ' Then WorkStatusName Else  ' ' ' ' End) As  ' + Weeks 
 From (Select Distinct Weeks From TableName) A 
 Select @S = @S +  ' From TableName Group By [DateName], Span ' 
 EXEC(@S)
------解决方案--------------------create table ta ([DateName] varchar(20),  Span varchar(20) , 
  Weeks varchar(10),   WorkStatusName varchar(10)) 
 insert ta 
 select  '时间段一 ',   '08:00-08:30 ',    '长周一 ',     '在岗 'union all 
 select  '时间段二 ',   '08:30-09:30 ',    '长周一 ',     '修息 'union all 
 select  '时间段三 ',   '09:00-09:30 ',    '长周一 ',    '在岗 'union all 
 select  '时间段四 ',   '09:00-10:30 ',    '长周一 ',     '在岗 'union all 
 select  '时间段二 ',   '08:00-08:30 ',    '短周一 ',    '在岗 'union all 
 select  '时间段二 ',   '08:00-08:30 ',    '短周一 ',    '修息 'union all 
 select  '时间段三 ',   '08:00-08:30 ',    '短周一 ',     '在岗 '   
 declare @sql varchar(2000) 
 select @sql=isnull(@sql, ' ')+ ',[ '+weeks+ ']=max( case weeks when  ' ' '+weeks+ ' ' ' then WorkStatusName else  ' ' ' ' end)  ' 
 from ta group by Weeks 
 --print @sql 
 select @sql= 'select [DateName],Span '+@sql+ ' from ta group by [DateName],Span ' 
 exec(@sql)     
 DateName             Span                 长周一        短周一 
 -------------------- -------------------- ---------- ---------- 
 时间段二                 08:00-08:30                     在岗 
 时间段三                 08:00-08:30                     在岗 
 时间段一                 08:00-08:30          在岗          
 时间段二                 08:30-09:30          修息          
 时间段三                 09:00-09:30          在岗          
 时间段四                 09:00-10:30          在岗            
 (6 行受影响)     
------解决方案--------------------select s.Datename,max(s.span) as  '时间段 ',t.WorkStatusName as  '长同一 ',v.WorkStatusName as  '短周一 '