0

I have a table with the following structure in 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

So on until week Monday field allows me to group all the days of a given week.

Now I need to gather the data in one record in a view:

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

Any help?

4

1 に答える 1

0

SQL Server 2005 以降では PIVOT 句がサポートされていますが、状況によってはデータを手動でピボットする方がよい場合があります。つまり、グループ化と条件付き集計を使用します。

ただし、元のテーブルIdの列であることが意図されている場合ID、ビューでは意味がありません。1 日ごとに独自の ID があり、ビューは 1 つの行に数日を収集するため、そこに 1 つを配置しても意味がないようです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
;
于 2013-06-17T13:02:11.717 に答える