使用PIVOT将多个记录合并为一个

时间:2013-06-17 04:23:21

标签: sql sql-server-2005 pivot

我在SQL Server 2005中有一个具有以下结构的表:

ID    Day     DayDate    TimeEntry  TimeOut   Rest     Monday
1   Monday   17-06-2013   08:00      18:00    14:30   17-06-2013
2   Tuesday  18-06-2013   08:00      18:00    14:30   17-06-2013

所以一直到周星期字段允许我对给定周的所有日子进行分组。

现在我需要在视图中的一条记录中收集数据:

Id DayDateMonday TimeEntryMonday TimeOutMonday RestMonday 
   DayDateTuesday TimeEntryTuesday TimeOutTuesday RestTuesday .... so on.

任何帮助?

1 个答案:

答案 0 :(得分:0)

虽然SQL Server 2005及更高版本中支持PIVOT子句,但在您的情况下手动转动数据可能会更好,即在分组和条件聚合的帮助下。

但请注意:Id,如果它原来是原始表中的ID列,则在您的视图中没有任何意义。每一天都有自己的ID,您的视图会在一行中聚集几天,所以在那里放置一个ID似乎没有任何意义。因此,出于本答案的目的,我将其替换为星期一的日期(Monday列,重命名为WeekDate以获取输出)。

除此之外,这是你老好的“手动”支点:

SELECT
  WeekDate = Monday,

  DayDateMonday   = MAX(CASE Day WHEN 'Monday' THEN DayDate   END),
  TimeEntryMonday = MAX(CASE Day WHEN 'Monday' THEN TimeEntry END),
  TimeOutMonday   = MAX(CASE Day WHEN 'Monday' THEN TimeOut   END),
  RestMonday      = MAX(CASE Day WHEN 'Monday' THEN Rest      END),

  DayDateTuesday   = MAX(CASE Day WHEN 'Tuesday' THEN DayDate   END),
  TimeEntryTuesday = ...  -- and so on

FROM timetable
GROUP BY
  Monday
;