【问题标题】:creating roster from a table从表中创建名册
【发布时间】:2014-12-08 14:20:49
【问题描述】:

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

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

所以现在我已经很好地设置了

day      name    shift
14-10    Smith   Morning
14-10    Johnes  Afternoon
14-10    Adams   Evening
15-10    Smith   Morning

现在我被困住了......

【问题讨论】:

  • 谷歌“sql server pivot”

标签: sql tsql sql-server-2005


【解决方案1】:

这可以通过 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

你可以在this fiddle看到它工作

【讨论】:

  • 您的下一步可能是将天数限制为大于今天的天数,然后您将只看到影响您一周的天数。
  • 如果你想让你的日子充满活力,你需要根据你当前的日期生成动态sql并执行它。
  • 谢谢,我知道我必须摆弄 pivot 命令,但我无法掌握它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-16
  • 1970-01-01
  • 2011-01-14
相关资源
最近更新 更多