Вы хотите сводную таблицу:
SELECT t.date,
MAX(CASE WHEN t.colname = 'col1name' THEN t.value END) AS col1name,
MAX(CASE WHEN t.colname = 'col2name' THEN t.value END) AS col2name,
MAX(CASE WHEN t.colname = 'col3name' THEN t.value END) AS col3name
FROM TABLE t
GROUP BY t.date
Если вы хотите сделать его динамическим на основе значения colname, вам нужно будет использовать динамический SQL , поскольку вам нужно сначала получить список значений colname перед построением фактического запроса.
Oracle не добавляла поддержку PIVOT / UNPIVOT до 11g. Выражение CASE
поддерживается 9i +; до 9i вы должны будете использовать DECODE ...