我在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.
任何帮助?
答案 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
;