2013-06-17 4 views
0

У меня есть таблица со следующей структурой в SQL Server 2005:Объединение нескольких записей в один с PIVOT

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

Хотя поддержка предложения PIVOT в SQL Server 2005 и выше поддерживается, возможно, лучше вручную вручную настроить данные в вашей ситуации, то есть с помощью группировки и условной агрегации.

Одно замечание: 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 
; 
+0

Он работает, спасибо Андрей М – cromared

Смежные вопросы