Исходная таблица может иметь переменное количество столбцов
Действительно?
Простой способ - выбрать и объединить нужные детали.
select col1 as key, 'case1' as case, col2 as result
from test
where col1 <> 'key'
union all
select col1 as key, 'case2' as case, col3 as result
from test
where col1 <> 'key'
union all
select col1 as key, 'case3' as case, col4 as result
from test
where col1 <> 'key'
Прямо, но не динамично.
Позже.,.
На основании вашего комментария.,,хотя я не думаю, что это необходимо.
select col1 as key, (select col2 from test where col1='key') as case, col2 as result
from test
where col1 <> 'key'
union all
select col1 as key, (select col3 from test where col1='key') as case, col3 as result
from test
where col1 <> 'key'
union all
select col1 as key, (select col4 from test where col1='key') as case, col4 as result
from test
where col1 <> 'key'
Oracle 11 также поддерживает UNPIVOT
, который я не использовал.