2015-08-10 3 views
0

У меня есть таблица АЯ хочу, чтобы преобразовать часть столбцов в строки

mon start end tue start end 
sub009 13:00 14:00 sub004 15:00 15:30 
sub004 14:00 15:00 sub005 15:30 16:00 
sub005 15:00 16:00 sub009 16:00 16:30 

, и я пытаюсь получить эту

13:00 14:00 15:00 15:30 16:00 16:30 
mon sub009 sub004 sub005 
tue   sub004 sub005 sub009 

пожалуйста, мне нужна помощь

+0

какая версия SQL Server? (всегда указывайте это!) Исправлен ли временной диапазон с 13:00 до 16:30? (или общий диапазон примерно с 08:00 до 18:00 на 30-минутные интервалы?) всегда ли 30-минутные интервалы? –

+0

Является ли tableA действительно только для понедельника и вторника? Это полный набор столбцов в таблице А? (таблица с нечетным видом) –

+0

Значение для пн 15:00 - это «sub004», которое заканчивается там, но значение для tue 15:30 - это «sub005», которое начинается там - так оно и должно быть в соответствии с датами начала или окончания в в другом формате? –

ответ

0

Если у вас есть таблица, как это

table - monday_schedule 
___________________________ 
Subject |startTime |endTime 
___________________________ 
sub009 13:00 14:00 
sub004 14:00 15:00 
sub005 15:00 16:00 

А вы - участок ting имена объектов в столбце конечного времени, и все время находится в интервале 30 минут. Тогда запрос, как показано ниже поможет:

select d,[14:00],[14:30],[15:00],[16:00],[16:30] 
    from 
    (select d,Subject, dayss 
    from 
    (select 'MON' as d,Subject, startTime, endTime from monday_schedule 
    UNION 
    select 'Tue' as d,Subject, startTime, endTime from tuesday_schedule 
    ) s 
    UNPIVOT 
    (dayss for hourss in ([endTime]) )up)s 
    PIVOT 
    (
    Max(Subject) for 
    dayss in ([14:00],[14:30],[15:00],[16:00],[16:30]) 
    )p 

Пример ссылки скрипку: http://sqlfiddle.com/#!6/6ec0a/3

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