Процесс взятия строк и превращения их в столбцы называется pivoting .По состоянию на 11g (?) Oracle имеет ключевое слово PIVOT
, чтобы сделать это изначально.Обратите внимание, что в Oracle нет типа данных time, поэтому перед преобразованием я преобразовал их в двузначные символы.В сводной таблице должна быть функция агрегирования, поэтому убедитесь, что у вас нет повторяющихся строк с одинаковой датой.
select * from (
select "Value", to_char( "Datetime", 'HH24' ) as dt from table1
)
pivot ( max( "Value" ) for ( dt ) in ( '00' AS "hour0",
'01' as "hour1", '02' as "hour2" ));
Редактировать:
Для агрегирования подень, игнорируя компонент времени, добавьте столбец TRUNCed
во встроенное представление.
select * from (
select "Value", trunc("Datetime") as the_day,
to_char( "Datetime", 'HH24' ) as dt from table1
)
pivot ( max( "Value" ) for ( dt ) in ( '00', '01', '02' ));
SQL Fiddle 2