Вертикально не расплющить таблицу с помощью SQL - PullRequest
3 голосов
/ 15 марта 2012

Моя строка темы, вероятно, не самая лучшая, но вот что я пытаюсь сделать:

У меня есть таблица с временем начала и окончания:

Event   Start     End
-------------------------    
event1  2:30 PM   3:00 PM
event2  3:05 PM   3:30 PM
event3  2:45 PM   3:10 PM

Я хочунаписать команду SQL (в Oracle), которая приведет к:

Event   Type    Time
-------------------------    
event1  START   2:30 PM
event3  START   2:45 PM
event1  END     3:00 PM
event2  START   3:05 PM
event3  END     3:10 PM
event2  END     3:30 PM

По сути, мне нужно упорядочить время и узнать событие, для которого оно предназначено, а также время начала или окончания.У меня такое чувство, что этого можно добиться с помощью какого-то причудливого SQL, но у меня возникают проблемы с размышлениями о том, как это сделать.

Спасибо!

1 Ответ

7 голосов
/ 15 марта 2012

Ничего особенного, кроме простого UNION будет достаточно

SELECT Event, 'START', Start AS Time
FROM   ATable
UNION ALL
SELECT Event, 'END', End AS Time
FROM   ATable
ORDER BY
       Time

Если вы хотите получить немного больше фантазии, UNPIVOT - это еще один вариант

SELECT  Event, Type, Time
FROM    ATable
UNPIVOT (Time FOR Type IN (Start, [End])) AS unpvt
ORDER BY  
        Time
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...