Sql 从表创建花名册

Sql 从表创建花名册,sql,tsql,sql-server-2005,Sql,Tsql,Sql Server 2005,我有原始表,其中包含以下格式的原始数据: gkey Start_date Finish_date Start_Hr Finish_hr Name 1 2014-01-01 2014-10-16 07 15 Smith 2 2014-01-01 2014-12-31 15 21 Johnes 3 2014-01-01 2014-12-31 21 07 A

我有原始表,其中包含以下格式的原始数据:

gkey    Start_date  Finish_date Start_Hr Finish_hr  Name
 1      2014-01-01  2014-10-16  07       15         Smith  
 2      2014-01-01  2014-12-31  15       21         Johnes
 3      2014-01-01  2014-12-31  21       07         Adams
 4      2014-10-16  2014-12-31  21       07         Doe
 ...
我想以每周花名册的形式展示

Shift      today      today+1     today+2      today+3....
Morning    Smith      Smith       Doe
Afternoon  Johnes     Johnes      Johnes
Evening   .....
我先把它放在一张漂亮的虚拟桌子上

declare @d datetime
declare @c integer
declare @T table (
[day] datetime,
name varchar(max),
shift varchar(max)
)


 set @c=1
 set @d= getdate();


 while @c<=7
 begin
 insert into @T
 select @d as [day],
 name,
 case when finish_hr <=6 then 'Morning' when finish_hr<=15 then 'Afternoon' when     finish_hr<=23 then 'Evening' end as shift
from calling_roster where start_date <=@d and finish_date >@d


 set @c= @c+1
 set @d = dateadd(day,1,@d)
 end

现在我被卡住了…

这可以通过PIVOT查询来完成

在这里,我将您的日期划分为一周中的几天:

SELECT [name], [Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday], [Sunday]
FROM (
    SELECT [name], DATENAME(dw, [day]) AS DayWeek, [shift]
    FROM table1
    ) AS src
    pivot (
        max([shift]) FOR DayWeek IN ([Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday], [Sunday])
    ) AS pvt

您可以在

Google“sql server pivot”中看到它的工作原理。您的下一步可能是将日期限制为比今天大的日期,然后您将只看到影响您一周的日期。如果您想使您的日期具有动态性,您需要基于当前日期生成动态sql并执行它。谢谢,我知道我必须摆弄pivot命令,但我不懂它的窍门
SELECT [name], [Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday], [Sunday]
FROM (
    SELECT [name], DATENAME(dw, [day]) AS DayWeek, [shift]
    FROM table1
    ) AS src
    pivot (
        max([shift]) FOR DayWeek IN ([Monday], [Tuesday], [Wednesday], [Thursday], [Friday], [Saturday], [Sunday])
    ) AS pvt