请熟悉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 '短周一 '